簡體   English   中英

Heroku上的Rails:git add environment.rb嗎?

[英]Rails on Heroku: git add environment.rb or not?

我通常git-ignore config / environment.rb文件。 我將ENV ['RAILS_ENV']設置添加到該文件中,因此在不同的計算機上應該不同。

但是,Heroku在git中需要該文件。 沒有它,應用程序將崩潰。

您如何處理?

謝謝。

山姆

Heroku有非常好的文檔 為了直接回答您的問題,它們提供了配置環境變量的接口。 它們甚至提供了一種機制 ,使部署到兩個以上具有不同環境的Heroku托管應用程序變得非常容易。

您不應忽略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常量設置為其他值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM