【问题标题】:Capistrano read from .env on deployment serverCapistrano 从部署服务器上的 .env 读取
【发布时间】:2014-05-29 22:09:42
【问题描述】:

我正在尝试将数据库备份作为 Capistrano (v3) 部署脚本的一部分(用于 NON-Rails 应用程序)。

脚本运行良好——如果我将数据库配置硬编码到其中。

现在我想从 .env 文件加载数据库配置。在我的本地机器上,我的 .env 文件(位于 Capfile 旁边的 repo 根目录中)如下所示:

DB_NAME='local_name'
DB_USER='local_user'
DB_PASSWORD='local_pw'
DB_HOST='127.0.0.1'

在服务器上,.env 文件(Capistrano 已放置在 shared 文件夹中并从 current 文件夹中符号化到)内容如下:

DB_NAME='dev_name'
DB_USER='dev_user'
DB_PASSWORD='dev_pw'
DB_HOST='127.0.0.1'

但是,在运行 cap deploy 时,我得到以下信息:

INFO [292e2535] Running /usr/bin/env mysqldump -u local_user --password='local_pw' --databases local_name -h 127.0.0.1 | bzip2 -9 > /var/www/vhosts/xxxxx/backups/database_local_name_2014-05-29_22:52:07.sql.bz2 on <server>

即它正在使用我的本地 .env 文件,而实际上我希望它加载服务器上存在的 .env 文件。如果可能的话,我不希望我的所有团队都必须管理一个单独的 .env.production 文件!

我的脚本的相关部分如下(使用Dotenv gem):

require 'dotenv'
Dotenv.load '.env'
username, password, database, host = ENV['DB_USER'], ENV['DB_PASSWORD'], ENV['DB_NAME'], ENV['DB_HOST']

任何帮助将不胜感激!

【问题讨论】:

    标签: ruby environment-variables capistrano capistrano3 env


    【解决方案1】:

    您可以使用Dotenv::Parser.call(string)。我正在使用 Capistrano 2.14(这是旧版本!)

    desc <<-desc
      ENV test
    desc
    task :test do
      text = capture "cat #{shared_path}/.env"
      ENV2 = Dotenv::Parser.call(text)
      puts ENV2['DB_NAME']
    end
    

    【讨论】:

      【解决方案2】:

      在 Capistrano 3 下,我需要修复 Krisztián Ferenczi 的答案

      task :load_remote_environment do
        on roles(:app) do
          set :default_environment, Dotenv::Parser.call(capture("cat #{shared_path}/.env"))
        end
      end
      after 'deploy:set_current_revision', 'load_remote_environment'
      

      在 Capfile 中

      require 'dotenv'
      

      【讨论】:

        猜你喜欢
        • 2011-08-26
        • 1970-01-01
        • 2017-12-27
        • 2016-06-02
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多