Capistrano和每当阶段变量

时间:2013-03-01 04:52:11

标签: ruby-on-rails capistrano 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

如何使该变量可用?

更新

我能够通过

来解决它

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

进入我的deploy / staging.rb。然后,我可以访问schedule.rb中的@stage

3 个答案:

答案 0 :(得分:5)

不确定这是否有效但值得一试(来自whenever 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环境变量

答案 1 :(得分:1)

NoMethodError: undefined method 'defer' for main:Object方法似乎不适用于Capistrano(3.4.1)/ when(0.9.7)的更高版本。我在set :whenever_environment, Proc.new { fetch :stage } 遇到了错误。这对我有用:

deploy.rb:

if @environment == 'production'
  every 15.minutes, roles: [:my_custom_role] do
    rake 'my_rake_task'
  end
end

schedule.rb:

@Value("${registry.retrieveserviceurl:'http://localhost:8090/registry/rest/retrieveServiceInfo'}")
String registryRetrieveServicesUrl;

@Value("${registry.errorserviceurl:'http://localhost:8090/registry/rest/notifyError'}")
String registryErrorUrl;

答案 2 :(得分:0)

@jvnill有正确的答案。如果你在不同的环境中使用config / deploy /,你可以通过将设置置于适当的阶段来保持整洁。

# config/deploy/staging.rb
set :whenever_command, "STAGE=#{stage} bundle exec whenever"

# config/deploy/production.rb
set :whenever_command, "STAGE=production bundle exec whenever"

# config/deploy.rb
require "whenever/capistrano"

要求'每当/ capistrano,'你负责在部署后运行:finalize_update。

https://github.com/javan/whenever/blob/master/lib/whenever/capistrano/v2/hooks.rb