簡體   English   中英

耙任務在生產中不起作用

[英]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.

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