我通常git-ignore config / environment.rb文件。我将ENV ['RAILS_ENV']设置添加到该文件中,因此它在不同的机器上应该是不同的。
但是,Heroku需要git中的文件。没有它,应用程序崩溃。
你是如何处理的?
感谢。
萨姆
答案 0 :(得分:1)
Heroku有pretty great documentation。要直接回答您的问题,他们会提供configure environment variables并与之对话。他们甚至provide a mechanism使得在不同环境下部署到两个+ Heroku托管的应用程序非常容易。
答案 1 :(得分:1)
你不应该忽略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
常量设置为不同的值,如上所述。 / p>