2013-10-18 54 views
2

我使用figaro gem並創建了一個application.yml文件,其中包含我的所有變量。這個application.yml文件位於一個共享文件夾(我正在使用capistrano),並且在當前活動應用程序目錄中符號鏈接到config/application.yml,但是我只能訪問rails控制檯中的變量而不是應用程序。我的憑據如下(真實詳細信息省略):ENV變量只能在生產控制檯中使用,不能在應用程序中使用 - Rails,Figaro Gem

注意:我已嘗試刪除「」語音標記,並將此列表與製作前綴匹配:每行有2個空格,而不是標籤,並且不包含解決一切。該文件的權限與用相同方式實現的databse.yml文件完全相同777。

application.yml

FFMPEG_LOCATION: "/path/to/ffmpeg" 
EMAIL_USERNAME: "[email protected]" 
EMAIL_PASSWORD: "password" 
S3_BUCKET: "my_bucket" 
AWS_SECRET_KEY_ID: "my_secret_key" 
AWS_ACCESS_KEY_ID: "my_access_key" 

我可以在生產控制檯訪問這些變量=>

Loading production environment (Rails 3.2.14) 
irb(main):001:0> ENV["S3_BUCKET"] 
=> "my-s3-bucket-name" 

但是他們不返回的應用程序本身什麼。我設置了我的Linux機箱,遵循Ryan的優秀Pro railscast情節http://railscasts.com/episodes/335-deploying-to-a-vps

如何在應用程序本身中訪問這些變量?

如果有人需要更多的代碼只是喊。

EDIT 我除去費加羅寶石實現在以下railscasts教程所示的YAML配置:http://railscasts.com/episodes/85-yaml-configuration-revised。我認爲這實際上是figaro gem在做的事情,然而不是使用ENV變量,本教程使用了CONFIG [:variables],這似乎很有效。

+0

乘客感染或獨角獸? – trh

+0

我使用nginx,獨角獸,postgres – dodgerogers747

+1

我會爲你的s3祕密直接使用yml而不是環境變量,但是如果你真的想要使用env的方式:對於nginx,你必須在主環境中設置env變量你的配置文件。您遇到麻煩的原因是nginx作爲自己的用戶運行,當您登錄並運行控制檯時,您是不同的用戶。 – trh

回答

2

根據註釋:

Nginx的運行作爲自己的用戶,這樣的環境變量需要住在它的空間。作爲登錄並運行控制檯的用戶,您正在訪問一組不同於nginx用戶訪問的環境變量。

如果您選擇將它們添加到main上下文中的nginx配置中,您可以執行此操作。但是直接使用yaml並將你的祕密標記添加到你的yaml文件可能更容易。

+0

我知道這已經差不多3年了,但請您詳細說明如何讓變量「活在它的空間」?我有完全相同的問題 - rails c production讓我將Figaro.env.secret_key_base視爲有效值,但config/secrets.yml中的ENV [「secret_key_base」]無法識別它。我收到'缺少生產環境的secret_key_base,請在config/secrets.yml>中設置此值 – mohnstrudel

相關問題