簡體   English   中英

將ActiveRecord的數據加載到Capistrano的deploy.rb

[英]Load ActiveRecord's data to Capistrano's deploy.rb

我正在使用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中要求使用“ ruby​​gems”和“ active_record”,但這沒有幫助。 結果,我應該有sidekiq_queues ==“ -q parsing_user_1 -q parsing_user_2 -q parsing_user_3 -q parsing_user_4 -q parsing_user_5 -q parsing_user_0”。 硬編碼隊列名稱不是解決方案。

Capistrano在本地執行deploy.rb,並且不會將您的Rails環境加載到deploy.rb中。

麻煩可能多於其價值。 特別是如果要在遠程服務器上執行此操作,則可以考慮執行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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM