私は通常、config/environment.rb ファイルを git-ignore します。そのファイルに ENV['RAILS_ENV'] 設定を追加して、別のマシンでは異なるようにします。
ただし、Heroku では git にそのファイルが必要です。これがないと、アプリケーションがクラッシュします。
どのように処理しますか?
ありがとう。
サム
私は通常、config/environment.rb ファイルを git-ignore します。そのファイルに ENV['RAILS_ENV'] 設定を追加して、別のマシンでは異なるようにします。
ただし、Heroku では git にそのファイルが必要です。これがないと、アプリケーションがクラッシュします。
どのように処理しますか?
ありがとう。
サム
無視してはいけませんconfig/environment.rb
。Zeke が既に回答したように、ライブの Heroku アプリで環境変数を設定できます。
heroku アプリで使用できる環境変数のリストを表示するには、 を実行しますheroku config
。特定の変数の値を設定するには、 run を実行しますheroku config:add RAILS_ENV=staging --app yourapp
。
しかし、自分のマシンで実行されている開発アプリについてはどうでしょうか? いくつかのオプションがあります。1 つは、シェルで環境変数をエクスポートすることです。
$ 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 バケットに送信したいと考えています。myapp-production
しかし、本番アプリ (Heroku 内) でファイルをS3 バケットに送信したいと考えています。
$ heroku config:add S3_BUCKET='myapp-production' --app myapp
そして、ステージング アプリ用の別のバケット (同じく Heroku で実行):
$ heroku config:add S3_BUCKET='myapp-staging' --app myapp-staging
git-ignoreconfig/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
上記のように、テストを実行している場合に定数を別の値に設定することができます。
Heroku には非常に優れたドキュメントがあります。あなたの質問に直接答えるために、環境変数を構成するためのインターフェースを提供しています。Heroku でホストされている 2 つ以上の異なる環境のアプリへのデプロイを非常に簡単にするメカニズムも提供します。