我通常 git-ignore config/environment.rb 文件。我将 ENV['RAILS_ENV'] 设置添加到该文件中,因此它在不同的机器上应该是不同的。
但是,Heroku 在 git 中需要该文件。没有它,应用程序就会崩溃。
你如何处理它?
谢谢。
山姆
我通常 git-ignore config/environment.rb 文件。我将 ENV['RAILS_ENV'] 设置添加到该文件中,因此它在不同的机器上应该是不同的。
但是,Heroku 在 git 中需要该文件。没有它,应用程序就会崩溃。
你如何处理它?
谢谢。
山姆
你不应该忽视config/environment.rb
. 正如 Zeke 已经回答的那样,您可以在实时 Heroku 应用程序中设置环境变量。
要查看您的 heroku 应用程序可用的环境变量列表,请运行heroku config
. 要设置特定变量运行的值heroku config:add RAILS_ENV=staging --app yourapp
。
但是,在您自己的机器上运行的开发应用程序呢?有一些选项,一个是在 shell 中导出环境变量:
$ export RAILS_ENV=staging
$ echo $RAILS_ENV
staging
但我更喜欢另一种方法。这就是我的config/environment.rb
:
# Load the rails application
require File.expand_path('../application', __FILE__)
# Load environment vars from local file
env_vars = File.join(Rails.root.to_s, 'config', 'env_vars.rb')
load(env_vars) if File.exists?(env_vars)
# Initialize the rails application
MyApp::Application.initialize!
如果有config/env_vars.rb
文件,它将被加载。这是示例env_vars.rb
文件的内容:
ENV["REDISTOGO_URL"] = 'redis://localhost:6379'
ENV["AWS_ACCESS_KEY"] = '283983483'
ENV["AWS_SECRET"] = '743843934'
ENV["S3_BUCKET"] = 'myapp-development'
这样,您可以为您的开发、登台和生产应用程序设置不同的环境变量。
你会想要 git-ignore 这个文件。
当我运行我的开发应用程序时,我想将文件发送到myapp-development
S3 存储桶。但我希望我的生产应用程序(在 Heroku 中)将文件发送到myapp-production
S3 存储桶。
$ heroku config:add S3_BUCKET='myapp-production' --app myapp
还有一个用于我的暂存应用程序的不同存储桶(也在 Heroku 中运行):
$ heroku config:add S3_BUCKET='myapp-staging' --app myapp-staging
由于您将 git-ignore config/env_vars.rb
,它不会出现在您在 Heroku 中运行的应用程序中,因此它们将从上述heroku config:add
配置中获取其环境变量。
由于我和其他人一起工作,所以我经常env_vars.rb.example
在项目中包含一个示例文件,它不会被 git 忽略:
文件config/env_vars.rb.example
:
# Copy this file to config/env_vars.rb
# MAKE SURE THAT YOUR .gitignore INCLUDES IT!
#
# This file is used to set environment variables that would be present on
# Heroku, and are needed for our development and test instances to run.
ENV["REDISTOGO_URL"] = 'redis://localhost:6379'
ENV["AWS_ACCESS_KEY"] = 'xxx'
ENV["AWS_SECRET"] = 'xxx'
ENV["S3_BUCKET"] = 'some-bucket'
if Rails.env.test?
HOST = "example.com"
else
HOST = "development.intranet"
end
请注意,加载此env_vars.rb
文件的一个优点是您可以以编程方式执行不同的操作,例如,HOST
如果您正在运行测试,则将常量设置为不同的值,如上所示。