gpt4 book ai didi

mysql - 如何从 Rails 4 中的外部文件加载数据库配置?

转载 作者:行者123 更新时间:2023-11-29 05:17:46 28 4
gpt4 key购买 nike

这是我的数据库配置文件

default: &default
adapter: mysql2
encoding: utf8
pool: 5

production:
<<: *default
host: localhost
database: demo_production
username: demo
password: demo

我不想为生产环境 checkin 我的数据库配置,我想通过外部文件加载它

如何在 Rails 4 中做到这一点?

最佳答案

您可以像这样使用环境变量加载数据库配置:

default: &default
adapter: mysql2
encoding: utf8
pool: 5

production:
<<: *default
host: <%= ENV['PROD_DB_HOST'] %>
database: <%= ENV['PROD_DB'] %>
username: <%= ENV['PROD_USER'] %>
password: <%= ENV['PROD_USER_PASS'] %>

如果您查看代码,我们在 YML 文件中嵌入了 ruby​​ 代码。当 Rails 执行它时,它会查找环境变量。环境变量可以通过 UNIX shell 或通过一些 ruby​​ 程序或 YML 文件设置。您必须确保在执行 database.yml 之前设置了环境变量。

方法 1: 如果您在 UNIX 中设置环境变量,请在启动 Rails 服务器之前导出变量。

export PROD_DB_HOST = "my_host"
export PROD_DB = "my_production_db"
export PROD_USER = "my_prod_user"
export PROD_USER_PASS = "my_password"

方法2:您也可以通过外部文件设置它们,然后将其加载到rails 应用程序中。让我们看看如何通过一些 ruby​​ 程序进行设置

#overrides.rb
# db configuration
ENV['PROD_DB_HOST'] = 'my_host'
ENV['PROD_DB'] = 'my_production_db'
ENV['PROD_USER'] = 'my_prod_user'
ENV['PROD_USER_PASS'] = 'my_password'

现在是最后一步,如何在 rails 应用程序中加载文件?

Rails 按照以下顺序加载配置文件

  1. 配置/boot.rb
  2. config/application.rb
  3. config/environment.rb
  4. config/environments/production.rb
  5. config/database.yml

因此,您必须在 rails 执行“config/database.yml”之前加载外部配置文件。

“boot.rb”和“application.rb”包含您的应用程序配置。我不想碰那个。我更喜欢在“environments/.rb”中加载配置文件。将此行附加到文件末尾。

# File: 'config/environments/production.rb'
# Load external configuration
load '/etc/prod_env/overrides.rb', :if_exists? => true

路径可以是任何东西,我已经把我的文件放在'/etc/prod_env/'。

关于mysql - 如何从 Rails 4 中的外部文件加载数据库配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30285853/

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