gpt4 book ai didi

ruby-on-rails - 我可以对我的 heroku rails 应用程序上的 unicorn::clientshutdown 错误做些什么?

转载 作者:行者123 更新时间:2023-12-04 02:23:14 24 4
gpt4 key购买 nike

我有一个接受图片上传的应用程序。这是 Heroku 上使用 Unicorn 的 rails 3 应用程序。我偶尔会收到 unicorn::clientshutdown异常,我真的不知道是什么导致了它们或如何处理它们。我该怎么办?

这是我的 unicorn.rb文件:

before_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.connection.disconnect!
Rails.logger.info('Disconnected from ActiveRecord')
end

# If you are using Redis but not Resque, change this
if defined?(Resque)
Resque.redis.quit
Rails.logger.info('Disconnected from Redis')
end
end

after_fork do |server, worker|
# Replace with MongoDB or whatever
if defined?(ActiveRecord::Base)
ActiveRecord::Base.establish_connection
Rails.logger.info('Connected to ActiveRecord')
end

# If you are using Redis but not Resque, change this
if defined?(Resque)
Resque.redis = ENV['REDIS_URI']
Rails.logger.info('Connected to Redis')
end
end

最佳答案

图片上传、Heroku 和 Unicorn,天哪。

问题

这是此错误的三重奏。您的 Heroku 日志中可能存在相关的 H12 错误 ( https://devcenter.heroku.com/articles/error-codes#h12-request-timeout )。正在发生的事情是请求完成时间太长(Heroku 有一个不可避免的 30 秒超时),所以它断开连接并且那个 unicorn worker 被杀了。此外,Unicorn 不适用于慢速/长时间运行的请求(参见 http://rainbows.rubyforge.org)

解决方案

诀窍是在前端上传图像而不访问服务器(CORS/AJAX/jquery.fileupload.js/etc),将上传的文件位置与表单提交一起传递,然后在稍后作为后台作业执行任何处理和重新上传,不受 30 秒超时限制的限制。其他人对此进行了更广泛的撰写。此外,您可以使用 Cloudinary 之类的服务来为您执行此操作。

PS

YMMV,但您也应该将其添加到您的 unicorn 配置中( https://devcenter.heroku.com/articles/rails-unicorn )

before_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end
# ...
end

after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT'
end
# ...
end

关于ruby-on-rails - 我可以对我的 heroku rails 应用程序上的 unicorn::clientshutdown 错误做些什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com