0

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

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

你如何处理它?

谢谢。

山姆

4

2 回答 2

1

Heroku 有非常棒的文档。为了直接回答您的问题,它们提供了配置环境变量的接口。他们甚至提供了一种机制,可以很容易地部署到具有不同环境的两个以上 Heroku 托管的应用程序。

于 2013-01-16T06:52:40.073 回答
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-developmentS3 存储桶。但我希望我的生产应用程序(在 Heroku 中)将文件发送到myapp-productionS3 存储桶。

$ 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如果您正在运行测试,则将常量设置为不同的值,如上所示。

于 2013-01-16T16:35:18.360 回答