Rails中的环境变量,在部署

时间:2017-12-28 22:05:23

标签: ruby-on-rails heroku environment-variables

我在哪里将环境变量放在Rails中,我可以在运行之前创建一个文件来检查环境吗?

在MERN堆栈应用程序(所有javascript)中,我在config文件夹中创建了3个文件:

keys.js dev.js prod.js

keys.js包含以下代码:

if (process.env.NODE_ENV === 'production') {
  module.exports = require('./prod');
} else {
  module.exports = require('./dev');
}

dev.js包含google,mongo,stripe等的所有变量。 'prod.js'具有以下代码:

module.exports = {
  googleClientID: process.env.GOOGLE_CLIENT_ID,
  googleClientSecret: process.env.GOOGLE_CLIENT_SECRET,
  mongoURI: process.env.MONGO_URI,
  cookieKey: process.env.COOKIE_KEY,
  stripePublishableKey: process.env.STRIPE_PUBLISHABLE_KEY,
  stripeSecretKey: process.env.STRIPE_SECRET_KEY,
  sendGridKey: process.env.SENDGRID_KEY,
  redirectDomain: process.env.REDIRECT_DOMAIN
};

config文件夹位于应用结构的根目录中。

我已经完成了部署到Heroku的工作,它完美无缺。我的开发环境允许我像在生产中一样测试API。它在我的仓库中被忽略,所以dev.js在Github上不可用。

我的问题:我将这样的文件放在Rails应用程序中的哪个位置?我可以创建这样的文件来存储我的env变量吗?

如果可能的话,我想使用相同的逻辑,我可以想出代码,但我对于把文件放在哪里感到不温不火。

1 个答案:

答案 0 :(得分:3)

我喜欢使用Figaro gem来管理Rails中的ENV变量。

设置

  1. 将gem添加到您的Gemfile中:
    gem 'figaro'
  2. 运行$ bundle install
  3. 安装gem
  4. 设置Figaro:$ bundle exec figaro install(这会在config /目录下创建一个名为application.yml的文件)
  5. 将ENV变量添加到新的config/application.yml文件
  6. 使用

    将ENV变量添加到config/application.yml文件中。例如,

    # config/application.yml
    
    google_client_id: '7381a978f7dd7f9a1117'
    google_client_secret: 'abdc3b896a0ffb85d373'
    mongo_uri: 'https://www.example.com'
    ...
    

    然后,您可以在Rails代码中使用ENV变量,只要您需要它们:ENV['google_client_id']

    不同环境的不同ENV变量和值......

    您可以为不同的环境指定变量的不同值,例如开发和测试。以下是费加罗自述文件中的一个例子:

    # config/application.yml
    
    pusher_app_id: "2954"
    pusher_key: "7381a978f7dd7f9a1117"
    pusher_secret: "abdc3b896a0ffb85d373"
    
    test:
      pusher_app_id: "5112"
      pusher_key: "ad69caf9a44dcac1fb28"
      pusher_secret: "83ca7aa160fedaf3b350"
    

    将ENV变量推送到Heroku

    听起来你正在使用Heroku。 Figaro使您可以轻松地将所有Rails环境变量一次部署到Heroku:figaro heroku:set -e production

    更多

    您可以使用费加罗做更多事情,只需查看他们的Github Readme

相关问题