【问题标题】:Environment variables in Rails, where to put for development testing before deployingRails 中的环境变量,部署前在哪里进行开发测试
【发布时间】:2017-12-28 22:05:23
【问题描述】:

在 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。它在我的 repo 中被忽略了,所以 dev.js 在 Github 上不可用。

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

如果可能的话,我想使用相同的逻辑,并且我可以计算出这样做的代码,但我对将文件放在哪里不感兴趣。

【问题讨论】:

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


    【解决方案1】:

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

    设置

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

    使用

    将您的 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变量和值...

    您可以为不同的环境(例如开发和测试)指定不同的变量值。这是 Figaro 的自述文件中的一个示例:

    # 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

    更多

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

    【讨论】:

    • 没有费加罗宝石有没有办法做到这一点?我对它很熟悉,但我有这种感觉,不要让我的应用程序变得臃肿,而我可能在没有 gem 的情况下可以更轻松地完成这些事情。我相信它会解决问题,但当可能有一个简单的解决方案时,我真的试图避免使用过多的宝石。
    • 在您的代码中添加库时,批判性思考始终是一个有效的点,但是使用 gem,尤其是 Figaro,在这一点上在社区中广泛传播,这反映了它的力量和稳定性。但是,我确实发现这篇文章更深入地研究了环境变量。它确实以推荐 Figaro 或 dotenv gem 结束,但我希望额外的参考有助于缓解您的担忧。 blog.honeybadger.io/ruby-guide-environment-variables
    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 2018-11-12
    • 2020-05-09
    相关资源
    最近更新 更多