Ruby on rails 为什么我的Net::HTTP.post\u会超时?

Ruby on rails 为什么我的Net::HTTP.post\u会超时?,ruby-on-rails,ruby,Ruby On Rails,Ruby,在我的rails应用程序控制器中,我正在同一台机器上发布应用程序的api。我已经构建了此功能来处理将数据发布到url的操作: url = "http://172.16.155.165:3000/api/jobs" params = { :input => "original/video.h264", :output => "new/video.mp4", :preset => 'h264' } jobResults = Net::HTTP.post_form(UR

在我的rails应用程序控制器中,我正在同一台机器上发布应用程序的api。我已经构建了此功能来处理将数据发布到url的操作:

url = "http://172.16.155.165:3000/api/jobs"
params = {
  :input => "original/video.h264",
  :output => "new/video.mp4",
  :preset => 'h264'
}

jobResults = Net::HTTP.post_form(URI.parse(url), params)
当我通过rails控制台运行此代码时,这非常有效,但当我在控制器中使用此代码时,在加载一分钟左右后会出现以下错误:

Timeout::Error in SeminarsController#create
Timeout::Error
一旦超时发生,数据将实际发布,api将执行它应该执行的操作。它就像是挂起,直到超时,然后发布数据。但控制器从未超出此步骤。它应该将响应主体写入带有
jobResults.body
的文件中,如果没有超时,该文件将正常工作。如果我将其写入rails控制台,它会立即输出响应。api永远不会花整整一分钟来响应

我是不是在做什么导致这一切发生?我怎样才能使它正常工作

编辑: 这是
app/controllers/api/jobs\u controller.rb中
create
的代码:

def create
  job = Job.from_api(params, :callback_url => lambda { |job| api_job_url(job) })
  if job.valid?
    response.headers["X-State-Changes-Location"] = api_state_changes_url(job)
    response.headers["X-Notifications-Location"] = api_notifications_url(job)
    respond_with job, :location => api_job_url(job) do |format|
      format.html { redirect_to jobs_path }
    end
  else
    respond_with job do |format|
      format.html { @job = job; render "/jobs/new"}
    end
  end
end

对。理想情况下,您应该将长时间运行的进程(是的,这是长时间运行的进程)删除到后台作业中。请记住,当许多用户开始更新视频时,由于许多原因(如带宽、API接受率等),此过程将停止<如果进程超过阈值,则代码>Rake::Timeout
始终弹出。它实际上是设计用来中止需要很长时间才能响应的请求的。而且,它不会在
控制台中引发

我怎样才能使它正常工作

将其移动到后台作业。或者,您可以通过这样做来明确地增加rake超时间隔

# config/initializers/timeout.rb
Rack::Timeout.timeout = 30  # seconds

但我建议不要这样做。此
rake超时
有助于调试。主要用于heroku和newrelic

实际上,我将超时设置为500,但它仍然超时。我只是为了测试。控制台在不到一秒钟的时间内执行此操作,但应用程序无法在500秒内完成。我想还有别的东西阻碍了我的应用程序。我只是不知道会是什么。在后台运行此功能非常理想。我将研究正确的方法来做到这一点。谢谢你的帮助。我想我可能只是在backticks中运行一个类似于
curl-d…
的系统调用,然后解决无法使用返回值的问题。