【问题标题】:How set environment variable on capistrano deploy?如何在 capistrano deploy 上设置环境变量?
【发布时间】:2014-08-29 12:24:48
【问题描述】:

在我的 rails 应用程序中,我从 env 设置响应标头:

response.headers['application-version'] = ENV["APPLICATION_VERSION"]

我尝试在 capistrano 部署文件中设置环境变量,但这不起作用。

set :default_environment, {
    'APPLICATION_VERSION' => Time.now.strftime('%Y%m%d%H%M%S%L')
}

如何在部署时设置环境变量?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 capistrano


    【解决方案1】:

    设置 default_environment(或 Capistrano 3.x 的 default_env)只会设置变量在部署命令期间。来自docs

    可用于设置环境变量的哈希值,所有执行的命令都应存在该变量。

    如果你想设置 Rails 服务器使用的环境变量——这是另一个进程,另一个 vm 实例,在另一个登录会话中——你需要为正在执行的会话设置环境变量,例如通过.bashrc.profile.zshrc 或您使用的任何外壳。您还可以使用一些环境变量管理器,例如direnvrbenv-vars 等。

    希望对您有所帮助。

    【讨论】:

    【解决方案2】:

    在一个 Rails 应用程序中,我使用 Capistrano 3。我使用 default_env 设置变量

    set :default_env, {
      'APPLICATION_VERSION' => Time.now.strftime('%Y%m%d%H%M%S%L')
    }
    

    对于另一个 Rails 应用程序,我使用 Capistrano 2。在那里我使用 :default_environment 设置变量。

    【讨论】:

    • 我使用 Capistrano 2 和 rails 3,但是 :default_environment 没有设置 env 变量。
    • @Kroid 真的吗? UPS。我必须检查我的部署脚本。谢谢。我不知道我的变量来自哪里;-)
    • default_env 仅在部署期间设置变量。
    【解决方案3】:

    我正在安装 gem Figaro,更新 capistrano2 文件:

    task :set_version do
      put 'application_version: ' + Time.now.strftime('%Y%m%d%H%M%S%L'), "#{current_path}/config/application.yml"
    end
    
    before 'deploy:start', 'set_version'
    

    在我需要 application_version 变量的地方,我在 rails 文件中得到它:

    app_version = Figaro.env.application_version
    

    p.s: 'deploy:restart' 不要重新加载 config/application.yml 文件,需要:'deploy:stop' 和 'deploy:start'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-12
      • 2018-11-03
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      相关资源
      最近更新 更多