我在哪里将环境变量放在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变量吗?
如果可能的话,我想使用相同的逻辑,我可以想出代码,但我对于把文件放在哪里感到不温不火。
答案 0 :(得分:3)
我喜欢使用Figaro gem来管理Rails中的ENV变量。
gem 'figaro'
$ bundle install
$ bundle exec figaro install
(这会在config /目录下创建一个名为application.yml的文件)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']
您可以为不同的环境指定变量的不同值,例如开发和测试。以下是费加罗自述文件中的一个例子:
# config/application.yml
pusher_app_id: "2954"
pusher_key: "7381a978f7dd7f9a1117"
pusher_secret: "abdc3b896a0ffb85d373"
test:
pusher_app_id: "5112"
pusher_key: "ad69caf9a44dcac1fb28"
pusher_secret: "83ca7aa160fedaf3b350"
听起来你正在使用Heroku。 Figaro使您可以轻松地将所有Rails环境变量一次部署到Heroku:figaro heroku:set -e production
您可以使用费加罗做更多事情,只需查看他们的Github Readme。