在padrino Rakefile上设置resque-pool抛出错误

时间:2014-11-15 12:42:29

标签: activerecord rack resque padrino

我已经设置了一个 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命令   连接。

**

1 个答案:

答案 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