Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 加载ActiveRecord';将数据发送至Capistrano';s deploy.rb_Ruby On Rails_Capistrano_Sidekiq - Fatal编程技术网

Ruby on rails 加载ActiveRecord';将数据发送至Capistrano';s deploy.rb

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

我使用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': 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