Heroku上的Rails:git是否添加environment.rb?

时间:2013-01-16 05:40:20

标签: ruby-on-rails git heroku

我通常git-ignore config / environment.rb文件。我将ENV ['RAILS_ENV']设置添加到该文件中,因此它在不同的机器上应该是不同的。

但是,Heroku需要git中的文件。没有它,应用程序崩溃。

你是如何处理的?

感谢。

萨姆

2 个答案:

答案 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>