gpt4 book ai didi

ruby - Capistrano 从部署服务器上的 .env 中读取

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:11 24 4
gpt4 key购买 nike

我正在尝试将数据库备份作为 Capistrano (v3) 部署脚本的一部分(用于非 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']

如有任何帮助,我们将不胜感激!

最佳答案

您可以使用 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

关于ruby - Capistrano 从部署服务器上的 .env 中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23943856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com