这是我的数据库配置文件

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

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

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

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

===============>>#1 票数:3

您可以使用环境变量加载数据库配置,如下所示:

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. 配置/ application.rb中
  3. 到config / environment.rb
  4. 配置/环境/ production.rb
  5. 配置/ 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 /'中。

  ask by Srikanth Gurram translate from so

未解决问题?本站智能推荐: