[英]Rake task doesn't work in production
我在lib/rake/searches.rb
的Rails 3.2.11應用程序中有此rake任務:
namespace :searches do
desc "Start background searches"
task :start => :environment do
Rails.logger.info "Starting searches..."
Campaign.all.each do |c|
next unless c.recurring?
Rails.logger.info "Starting searches for campaign '#{c.name}'"
SearchWorker.enqueue(:campaign_id => c.id, :clear => true)
end
end
end
當我在本地運行它時,一切都很好。 當我在生產環境中運行它時,會出錯:
$ bundle exec rake searches:start
rake aborted!
uninitialized constant SearchWorker
/var/apps/web/lib/tasks/searches.rake:9:in `block (3 levels) in <top (required)>'
/var/apps/web/lib/tasks/searches.rake:5:in `block (2 levels) in <top (required)>'
Tasks: TOP => searches:start
(See full trace by running task with --trace)
當我進入控制台會話時,可以看到該類已正確自動加載:
$ bundle exec rails console
Loading production environment (Rails 3.2.11)
irb(main):001:0> SearchWorker
=> SearchWorker
這些工作人員居住在app/workers
,並且已將它們添加到application.rb中的autoload_paths
配置設置中:
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
config.autoload_paths += %W(
#{config.root}/custom_scripts
#{config.root}/app/workers
#{config.root}/app/models/filters
)
因此,我不知道為什么錯誤僅發生在生產中以及從rake任務運行時發生。
有任何想法嗎?
看來您已創建擴展名為.rb的rake文件
lib/rake/searches.rb
你可以嘗試將其更改為
lib/rake/searches.rake
那應該工作
這是由於:environment
任務完成后,Rails 3.2中的生產環境沒有完全加載。
如果您明確要求SearchWorker
即。
require 'app/workers/search_worker'
在任務塊的開始,它將起作用。
(為什么我不知道為什么自動加載無法為您完成此操作)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.