4

ステージング サーバーでは、実稼働環境で Rails アプリケーションを実行し、実稼働サーバーとできるだけ同じようにします。crontab を作成するために when を使用しています。ただし、Google と Bing に ping を送信しないように、サイトマップ生成用に少し異なる rake タスクを実行する必要があります。

deploy.rb には: set :stages, %w(production staging)がありますが、deploy/staging.rb と deploy/production.rb の両方に:rails_env, "production"設定しているため、使用できませんRails.env

schedule.rb、次のようなことをしたい:

every :day, at: '1am' do
  if @stage == 'production'
    rake 'sitemap:refresh'
  else
    rake 'sitemap:refresh:no_ping'
  end
end

その変数を利用可能にするにはどうすればよいですか?

アップデート

置くことで解決できました

set :whenever_variables, defer { "stage=#{stage}" }

私の deploy/staging.rb に。@stageその後、schedule.rbにアクセスできました

4

3 に答える 3

5

これが機能するかどうかはよくわかりませんが、試してみる価値はあります ( everyone readmeから)

# deploy.rb
set :whenever_environment, defer { stage }
require "whenever/capistrano"

次に、あなたのschedule.rbで

set :environment, ENV['RAILS_ENV']

case environment
when 'production', 'staging'
  ...
when 'production'
  ...
when 'staging'
  ...
end

更新:使用することもできます

set(:whenever_command) { "STAGE=#{stage} bundle exec whenever" }

STAGE内部の環境変数にアクセスできるようにするschedule.rb

于 2013-03-01T06:10:48.973 に答える