9

schedule.rbファイルでは、次のステートメントがあります。

require "#{RAILS_ROOT}/config/environment.rb"

 every "10 10 2 * * *" do
      command "mysqldump -u #{@db_username} -p#{@db_password} --single-transaction #{@db_name} > #{@backup_Path}/#{@db_name}.sql 2> log/error_crontab.log"
 end

ターミナルからeverythingcmdを実行しようとすると、次のエラーが発生します。

 config/schedule.rb:48:in `initialize': uninitialized constant Whenever::JobList::RAILS_ROOT (NameError)
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/job_list.rb:19:in `instance_eval'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/job_list.rb:19:in `initialize'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever.rb:16:in `new'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever.rb:16:in `cron'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/command_line.rb:40:in `run'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/command_line.rb:7:in `execute'
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/bin/whenever:38:in `<top (required)>'
    from /usr/local/bin/whenever:19:in `load'
    from /usr/local/bin/whenever:19:in `<main>'

requireステートメントを使用して、フォームから動的な値を取得し、ジョブをスケジュールしています。この問題の解決にご協力ください。

注:私は次のstackoverflowクエリを見ました: いつでも内部のRails環境を検出する方法

このスレッドに従って動的な値を取得しますが、requireステートメントで問題が発生します。 Rails-いつでも宝石-動的な値

Ruby/Rails-いつでもgem-cronタスクをループする

Railsを使用したschedule.rbの設定ファイルいつでもgem?

4

3 に答える 3

30

Railsをまったく必要としない、または依存しない場合は常に、RAILS_ROOTは定義されませんが、schedule.rbは通常/config/schedule.rbに保持されるため、Railsにあると想定できます。プロジェクトを作成し、次のように独自のRAILS_ROOTを設定します。

# in schedule.rb
RAILS_ROOT = File.dirname(__FILE__) + '/..'

編集:実際にRailsをロードする必要がある場合は、次のようにします。

# in schedule.rb
# this will require config/environment and load your entire rails environment
require File.expand_path(File.dirname(__FILE__) + "/environment")
于 2011-11-02T13:43:34.543 に答える
18

開発者がすでにこの質問に回答している場合は、https://github.com/javan/whenever/issues/81を確認してください。

JavanRails環境をロードしようとしなくなったときはいつでも。ただし、から実行されるたびに、ディレクトリへのパス変数が自動的に設定されます。これはまったく同じように機能するはずです。

set :output, "#{path}/log/cron.log"
于 2013-01-24T18:12:12.157 に答える
3

Rails 4では、次のことを試してください。

require File.expand_path(File.dirname(__FILE__) + "/../config/environment")

あなたのschedule.rbファイルに。このようにして、すべてのアクティブレコードモデルと初期化子にもアクセスできます。

于 2016-04-14T23:17:29.993 に答える