2012-09-09 115 views

回答

4

我不認爲你可以= /。

我們在Rails應用程序中使用的一種解決方法是將ssh(ey ssh)添加到EngineYard並在vim /data/your_app_name/shared/config/exports.rb中創建一個文件。此文件可以是這個樣子:

ENV["AWS_ACCESS_KEY_ID"] = "your key" 
ENV["AWS_SECRET_ACCESS_KEY"] = "your secret" 
ENV["AWS_BUCKET"] = "your bucket" 

然後在配置/的boot.rb您所需要的文件:

require File.expand_path('./exports', File.dirname(__FILE__)) 

這既不漂亮,也不費力。但是,它讓你在你的應用中使用祕密,你不應該檢查到源代碼控制!

+1

你絕對可以使用廚師做到這一點,所以你的答案不是規定的方式。 – WattsInABox

+0

我很喜歡這個答案,它比你的無限好..因爲你不提供替代品。 –

9

我們遇到了同樣的問題,並要求EngineYard提供一些幫助。來自安永的Jim Neath帶回以下回應:

不幸的是,乘客沒有從系統通過環境變量 。你需要做的是建立一個紅寶石包裝, 使用這個定義你的環境變量和發射乘客,如 說明如下:

http://blog.phusion.nl/2008/12/16/passing-environment-variables-to-ruby-from-phusion-passenger/

我已經創建了一個基本的自定義廚師食譜,將做到這本:

https://github.com/jimneath/ey-cloud-recipes/tree/master/cookbooks/passenger_env_vars

您將需要更新環境中的以下文件 變量:

/ey-cloud-recipes/blob/master/cookbooks/passenger_env_vars/templates/default/env.custom.erb

+2

我想我應該讓每個人都知道這些自定義食譜中存在錯誤(可能是因爲它們太舊了)。如果['app_master','app','solo'] default.rb應該是:'if ['app_master','app','solo']。include?(node [:instance_role])''而不是''。包括?(node [:role])' – WattsInABox

1

我的回答如果你想運行rake任務(即cron作業),需要這些環境變量,變量存儲在/data/my_app/shared/config/env.custom

source /data/my_app/shared/config/env.custom && cd /data/my_app/current/ && bundle exec rake my_rake_task 
1

我以前也用Heroku現在我搬到了Engineyard。這是我如何得到我的ENvironemnt變量Heroku 我添加了寶石figaro。這個寶石基本上需要在app/config目錄中的文件application.yml。當Rails應用程序初始化時,它將被執行並將以YAML格式設置的鍵值對加載到內存中。 HerokuFigaro可以選擇設置application.yml的內容。

$ figaro heroku:set -e production 

然而,在Engineyard我們需要使用SCP選項EY包和其餘的事情將由figaro進行手動複製application.yml

首先在gemfile中包含gem figaro並安裝gem。
然後我們需要使用engineyard-hooks將文件/data/[your_app]/shared/config/application.yml複製到/data/[your_app]/current/config/application.yml。 我們需要使用before_restart

# inside your project repo create a 'deploy' folder and 
# inside deploy/before_restart.rb paste the following code with or without modifications 
# This file is executed everytime after deploy just before your app restarts 
on_app_servers_and_utilities do 
    # Copy the yaml files from `shared/config` to `current/config` 
    ['application.yml'].each do |file_name| 
    run "ln -nfs #{config.shared_path}/config/#{file_name} #{config.release_path}/config/#{file_name}" 
    end 
end 

提交更改,並推送到github上回購或其他地方。

高興在這裏,不存在文件/data/[your_app]/shared/config/application.yml。現在使用以下命令將文件從本地複製到服務器

# This copies the application.yml to every instance like app_master, app_slave, utilities, database, etc  
$ ey scp config/application.yml HOST:/data/[your_app_name]/shared/config/ -e app_environment --all 

現在您可以部署您的應用程序並獲取所有環境變量。

注意:每次啓動環境時,都需要調用上述命令將文件複製到服務器。意思是,如果你停止分期(例如),並在一段時間啓動後,你需要調用以上命令

+0

https://cbabhusal.wordpress.com/2015/07/22/engineyard-ruby-on-rails-setting-environment-variables-at-once/ – illusionist