2013-03-25 3 views
2

У меня возникли проблемы с поиском драгоценного камня/решения. Мне нужно решить эту проблему. Таким образом, в основном, когда приходит запрос, я хочу разветвить поток (или фоновый процесс) и немедленно запустить его (без задержки). Тем не менее, я попытался использовать dalayed_jobs, но он, похоже, захотел в очередь, и не сразу начнет команду сразу. Есть ли способ сделать это в рельсах?Rails Фоновый процесс

Update

#user_controller.rb 
def show 
    @user = User.find(params[:id]) 
    @user.update_user #process to be forked 
    render json:@user 
end 

#user.rb 

def update_user 
    # code to update user 
end 
handle_asynchronously :update_user 

Спасибо,
DO

+0

Если вы не указали время в отложенной работе, оно будет запущено немедленно. –

+0

@MuhamamdAwais они помещаются в базу данных, но никогда не запускались. – dostrander

+0

, пожалуйста, проверьте последнюю запись delayed_job следующих атрибутов: fail_at, last_error и run_at –

ответ

1

Задержка заданий запускает процесс сразу после его запуска (в соответствии с вашим кодом), так как вы не указали, когда его запускать. Чтобы заставить его работать, вы можете запустить rake jobs:work, но вы, вероятно, хотите, чтобы процесс запускался в фоновом режиме, так что запустите демон delayed_job в терминале.

script/delayed_job start 
0

С Ruby 1.9 вы должны быть в состоянии сделать это, позвонив Process.spawn "свою команду", например:

pid = Process.spawn("./some_shell_script.sh") 
puts "A shell script has just been launched with a Process ID of #{pid}" 

Эта команда должна порождать отдельный процесс и возвращать идентификатор процесса.

+0

Я хотел бы сделать это в модели рельсов, если это возможно. Или еще мне придется делать много логики с SQL и переделывать мои модели – dostrander

Смежные вопросы