我正在尝试让在Unicorn下运行的Rails应用连接到一个受密码保护的Redis服务器,但遇到了意外和显著的问题。
通过命令行上使用“bundle exec rails c production”,我可以通过Resque.redis发出命令。然而,当它在Unicorn下被fork时,我的配置似乎丢失了。
使用非密码保护的Redis服务器就能正常工作。但是,我打算在Redis服务器所在的其他服务器上运行workers,因此需要进行密码保护。
我还成功地使用了同样的技术来使用受密码保护的Redis服务器,但是使用的是Passenger而不是Unicorn。
我的设置如下:
通过命令行上使用“bundle exec rails c production”,我可以通过Resque.redis发出命令。然而,当它在Unicorn下被fork时,我的配置似乎丢失了。
使用非密码保护的Redis服务器就能正常工作。但是,我打算在Redis服务器所在的其他服务器上运行workers,因此需要进行密码保护。
我还成功地使用了同样的技术来使用受密码保护的Redis服务器,但是使用的是Passenger而不是Unicorn。
我的设置如下:
# 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
.
Resque.redis = "redis://user:PASSWORD@oak.isc.org:6379"
,但是遗憾的是没有成功。Resque工作进程可以正常工作,但Rails Web应用程序无法使用它。如果我更改端口,工作进程会跟踪此更改,但应用程序不会。 - Michael GraffResque.redis
的输出是什么? - Seamus AbshereResque.redis.quit
,然后再运行相同的Resque.redis = "url"
命令也能正常工作。 - Michael Graff