Ruby on rails 加载ActiveRecord';将数据发送至Capistrano';s deploy.rb
我使用Capistrano进行部署,使用Sidekiq进行队列。我需要加载用户ID以在deploy.rb文件中设置:sidekiq_queues变量来执行sidekiq队列。现在我使用以下代码Ruby on rails 加载ActiveRecord';将数据发送至Capistrano';s deploy.rb,ruby-on-rails,capistrano,sidekiq,Ruby On Rails,Capistrano,Sidekiq,我使用Capistrano进行部署,使用Sidekiq进行队列。我需要加载用户ID以在deploy.rb文件中设置:sidekiq_queues变量来执行sidekiq队列。现在我使用以下代码 set :sidekiq_queues, ::User.all.map {|u| "-q parsing_user_#{u.id}"}.join(" ") + " -q parsing_user_0" 但它抛出了以下错误 ./config/deploy.rb:29:in `load': uninitia
set :sidekiq_queues, ::User.all.map {|u| "-q parsing_user_#{u.id}"}.join(" ") + " -q parsing_user_0"
但它抛出了以下错误
./config/deploy.rb:29:in `load': uninitialized constant User (NameError)
我试图在deploy.rb中输入'rubygems'和'active_record',但没有效果。
结果我应该
sidekiq_queues==“-q解析_user_1-q解析_user_2-q解析_user_3-q解析_user_4-q解析_user_5-q解析_user_0”。
硬编码队列名称不是一个解决方案。Capistrano在本地执行deploy.rb,并且它不会在deploy.rb中加载Rails环境 这可能比它的价值更麻烦。特别是如果您想在远程服务器上执行此操作,则可以考虑执行RAKE任务。rake任务中的
=>:environment
确保加载Rails环境
# in deploy.rb
namespace :sidekiq do
desc "Do something with queues"
task :queues, :roles => :web do
run "cd #{current_path} ; RAILS_ENV=#{rails_env} bundle exec rake sidekiq:queues"
end
end
# you'll need to decide when to execute this in your deployment process,
# something like this:
after "deploy:update_code", "sidekiq:queues"
# in lib/tasks/sidekiq.rake
namespace :sidekiq do
desc "Do something with queues"
task :queues => :environment do
queues = (User.scoped.pluck(:id) + [0]).map{|id| "-q parsing_user_#{id}"}.join(" ")
# do what you need to do
end
end
Capistrano在本地执行deploy.rb,它不会在deploy.rb中加载Rails环境 这可能比它的价值更麻烦。特别是如果您想在远程服务器上执行此操作,则可以考虑执行RAKE任务。rake任务中的
=>:environment
确保加载Rails环境
# in deploy.rb
namespace :sidekiq do
desc "Do something with queues"
task :queues, :roles => :web do
run "cd #{current_path} ; RAILS_ENV=#{rails_env} bundle exec rake sidekiq:queues"
end
end
# you'll need to decide when to execute this in your deployment process,
# something like this:
after "deploy:update_code", "sidekiq:queues"
# in lib/tasks/sidekiq.rake
namespace :sidekiq do
desc "Do something with queues"
task :queues => :environment do
queues = (User.scoped.pluck(:id) + [0]).map{|id| "-q parsing_user_#{id}"}.join(" ")
# do what you need to do
end
end