我已经设置了一个 Padrino 总线应用程序,使用超酷的 Resque 来处理后台进程,并使用 ResqueBus 来设置事件的pub / sub。
ResqueBus 设置会创建一个resque队列以及一个可以处理它的worker。这里的一切都很好。现在,因为resquebus只为单个队列创建一个单独的工作程序,并且我的总线应用程序中的进程可能会变得混乱,因为许多事件将被发布和订阅。因此,每个应用程序队列的单个工作程序似乎效率低下。因此想到集成resque-pool gem来处理worker进程。
我已经遵循了resque pool gem指定的所有进程。我编辑了我的Rakefile。
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
Ojus::Application.load_tasks
require 'resque/pool/tasks'
# this task will get called before resque:pool:setup
# and preload the rails environment in the pool manager
task "resque:setup" => :environment do
# generic worker setup, e.g. Hoptoad for failed jobs
end
task "resque:pool:setup" do
# close any sockets or files in pool manager
ActiveRecord::Base.connection.disconnect!
# and re-open them in the resque worker parent
Resque::Pool.after_prefork do |job|
ActiveRecord::Base.establish_connection
end
end
现在我尝试运行此resque-pool命令。
resque-pool --daemon --environment production
这会抛出这样的错误。
/home/ubuntu/.rvm/gems/ruby-2.0.0-p451@notification-engine/gems/activerecord-4.1.7/lib/active_record/connection_adapters/connection_specification.rb:257:in'refour_symbol_connection' ;:' default_env'数据库未配置。可用:[:development,:production,:test](ActiveRecord :: AdapterNotSpecified)
我试图对此进行调试,发现它在行
处抛出错误ActiveRecord::Base.connection.disconnect!
现在我删除了这一行,一切似乎都正常。但由于这个问题,可能会出现问题,因为如果我们重新启动padrino应用程序,旧的ActiveRecord连接将会挂起。
**
我只是想知道这个问题是否有任何解决方法 通过关闭所有ActiveRecord来运行resque-pool命令 连接。
**
答案 0 :(得分:1)
如果您提供了padrino的database.rb文件,那将会很有帮助。
没关系,你可以试试
defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect!
而不是ActiveRecord :: Base.connection.disconnect!
和
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[Padrino.env])
而不是ActiveRecord :: Base.establish_connection()
要建立与activerecord的连接,您必须将参数传递到您想要连接的环境,否则它将搜索' default_env'这是activerecord中的默认值。 签出源代码source code