![](/img/trans.png)
[英]Ruby on Rails - Testing changes to Capistrano's 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中要求使用“ rubygems”和“ 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.