在执行下一个命令之前Rails没有渲染

时间:2014-07-31 07:16:47

标签: python ruby-on-rails exec thin webrick

我使用Rails 4,我想在编辑控制器后执行Python脚本。

我已经完成了:

 if @a_serverconfiguration.update(a_serverconfiguration_params)
    format.html { redirect_to @a_serverconfiguration, notice: 'Device configuration was successfully updated. Next time, you have to access to new ip configuration. Rebooting device, this would take a while...' }
   format.json { render :show, status: :ok, location: @a_serverconfiguration }
Thread.new do      
    exec "sudo python /home/pi/Desktop/starting.py"
end
  else
    format.html { render :edit }
    format.json { render json: @a_serverconfiguration.errors, status: :unprocessable_entity }
  end
end

但是在执行python脚本之前我无法看到我的显示页面。此脚本在10秒后重新启动,因此当用户更新控制器时,无法看到消息'设备配置已成功更新。下次,您必须访问新的ip配置。重新启动设备,这需要一段时间......'。 Webrick等了10秒然后才下台。

我已经尝试过Webrick和瘦身,两者都做同样的事情。

1 个答案:

答案 0 :(得分:0)

如果我理解得很好:您希望控制器在python脚本完成之前呈现响应。

使用线程允许同时运行多个代码块,我想你想像后台作业一样执行你的python脚本。

而不是使用Thread看看[delayed_job gem] [1]。这个gem在后台封装并执行更长的任务。