Capistrano和每当阶段变量

Jas*_*son 4 capistrano ruby-on-rails whenever whenever-capistrano

在我们的登台服务器上,我们在生产环境中运行Rails应用程序,以便尽可能与我们的生产服务器相似.我们正在使用何时创建我们的crontab.但是,我们需要为我们的站点地图生成运行稍微不同的rake任务,因此它不会ping Google和Bing.

在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
Run Code Online (Sandbox Code Playgroud)

如何使该变量可用?

更新

我能够通过推杆解决它

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

进入我的deploy/staging.rb.然后我可以访问@stageschedule.rb

jvn*_*ill 5

不确定这是否有效但值得一试(从每当自述)

# deploy.rb
set :whenever_environment, defer { stage }
require "whenever/capistrano"
Run Code Online (Sandbox Code Playgroud)

然后在你的schedule.rb

set :environment, ENV['RAILS_ENV']

case environment
when 'production', 'staging'
  ...
when 'production'
  ...
when 'staging'
  ...
end
Run Code Online (Sandbox Code Playgroud)

更新:你也可以使用

set(:whenever_command) { "STAGE=#{stage} bundle exec whenever" }
Run Code Online (Sandbox Code Playgroud)

这样你就可以访问STAGE里面的环境变量了schedule.rb