我在尝试让一个在 Unicorn 下运行的 Rails 应用程序连接到受密码保护的 Redis 服务器时遇到了意想不到的重大问题。
在命令行上使用bundle exec rails c production
,我可以通过 Resque.redis 发出命令。但是,似乎我的配置在 Unicorn 下分叉时丢失了。
使用不受密码保护的 Redis 服务器 Just Works。但是,我打算在 Redis 服务器所在的其他服务器上运行工作程序,因此我需要对其进行密码保护。
我也成功地使用了受密码保护的密码(使用相同的技术),但使用的是乘客而不是独角兽。
我有以下设置:
# config/resque.yml
development: localhost:6379
test: localhost:6379
production: redis://user:PASSWORD@oak.isc.org:6379
.
# config/initializers/redis.rb
rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/../..'
rails_env = ENV['RAILS_ENV'] || 'development'
$resque_config = YAML.load_file(rails_root + '/config/resque.yml')
uri = URI.parse($resque_config[rails_env])
Resque.redis = Redis.new(host: uri.host, port: uri.port, password: uri.password)
.
# unicorn.rb bootup file
preload_app true
before_fork do |server, worker|
Redis.current.quit
end
after_fork do |server, worker|
Redis.current.quit
end
.