![](/img/trans.png)
[英]Making Rails, Heroku, Unicorn, Sidekiq and Hirefire all play nice
[英]Configuring Unicorn & Sidekiq correctly on Heroku
我得到ActiveRecord::StatementInvalid (PG::Error: SSL error: decryption failed or bad record mac
错误,所以我按照本指南关于将Unicorn部署到Heroku并且它似乎已修复它。但是在警告下它显示了如何配置Resque
对于这样的设置 - 我是否必须做与Sidekiq
类似的Sidekiq
?
示例代码来自Heroku:
before_fork do |server, worker|
...
# 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|
...
# 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
这就是我目前设置的内容:
配置/ unicorn.rb
worker_processes 2
timeout 30
preload_app true
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
defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
end
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end
配置/初始化/ sidekiq.rb
require 'sidekiq'
Sidekiq.configure_client do |config|
config.redis = { :size => 1 }
end
Sidekiq.configure_server do |config|
config.redis = { :size => 6 }
end
Procfile
web: bundle exec unicorn -p $PORT -E $RACK_ENV -c ./config/unicorn.rb
worker: bundle exec sidekiq -e production -c 4
这是我拥有的,它的工作原理:
配置/ unicorn.rb
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 5)
timeout 15
preload_app true
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
defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
end
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
Sidekiq.configure_client do |config|
config.redis = { size: 1, namespace: 'sidekiq' }
end
end
配置/初始化/ sidekiq.rb
ENV["REDIS_URL"] ||= "redis://localhost:6379"
Sidekiq.configure_server do |config|
config.redis = { url: ENV["REDIS_URL"], namespace: 'sidekiq' }
end
unless Rails.env.production?
Sidekiq.configure_client do |config|
config.redis = { url: ENV["REDIS_URL"], namespace: 'sidekiq' }
end
end
注意:我在heroku上使用thin
on development和unicorn
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.