0

以下を含むモデルがあります。

  def fetch_austlii
    Resque.enqueue(FetchAustliiJob, self.id) # Queue the job for later.
  end

これにより、 app/workers/fetch_austlii_job.rb ファイルがディスパッチされます。

class FetchAustliiJob

  @queue = :fetch_queue

  def self.perform(profile_id)
    @profile = Profile.find(profile_id)
    AustliiResource.fetch(@profile.name).each do |resource|
      @profile.austlii_resources.create!(resource.attributes) if @profile.austlii_resources.find_all_by_url(resource.url).empty?
    end
  end

end

開発中 (OS X、Ruby 1.9.2、Rails3、Postgres、Redis-server、Foreman) では問題なく動作します。このジョブは、必要に応じてインターネットから情報を取得します。ただし、本番環境 (Ubuntu、Ruby 1.9.2、Passenger) では次のように失敗します。

Class
FetchAustliiJob
Arguments
2
Exception
NoMethodError
Error
undefined method `austlii_resources' for #<Profile:0x00000002fab6b0>
4

1 に答える 1

1

サーバー上の正しい環境 (本番環境と開発環境) でワーカーを実行していることを確認してください。

まだ試していない場合はconfig/setup_load_paths.rb、RVM 環境をロードするために を作成することをお勧めします (ソース: RVM Passenger docs ):

if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
  begin
    rvm_path     = File.dirname(File.dirname(ENV['MY_RUBY_HOME']))
    rvm_lib_path = File.join(rvm_path, 'lib')
    $LOAD_PATH.unshift rvm_lib_path
    require 'rvm'
    RVM.use_from_path! File.dirname(File.dirname(__FILE__))
  rescue LoadError
    # RVM is unavailable at this point.
    raise "RVM ruby lib is currently unavailable."
  end
end

ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
require 'bundler/setup'
于 2011-07-05T22:14:51.993 に答える