1

デプロイメントにはCapistranoを使用し、キューにはSidekiqを使用しています。sidekiqキューを実行するには、deploy.rbファイルに:sidekiq_queues変数を設定するためにユーザーIDをロードする必要があります。今私は次のコードを使用します

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)

「rubygems」と「active_record」をdeploy.rbに要求しようとしましたが、役に立ちませんでした。結果として、sidekiq_queues == "-q parsing_user_1 -q parsing_user_2 -q parsing_user_3 -q parsing_user_4 -q parsing_user_5-qparsing_user_0"が必要になります。キュー名をハードコーディングすることは解決策ではありません。

4

1 に答える 1

1

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
于 2012-11-23T13:41:38.143 に答える