2011-07-30 46 views
1

我使用的是軌道3,我想設置基於當前環境中的存儲變量,象下面這樣:設定來可變on Rails的環境

#if enviroment = development or test 
    :storage => :filesystem, 
    #else 
    :storage => :s3, 
    #end 

你會有什麼辦法呢?我想過設置一個環境變量,但我認爲必須有更好的方法。

感謝您的時間 西蒙娜

回答

9

一種方法是使用rails中的內置環境設置。在環境目錄中設置的變量將覆蓋配置/環境

到config/environment.rb

ATTACHMENT_OPTIONS = {:storage => :filesystem} 

配置/環境/ production.rb

ATTACHMENT_OPTIONS = {:storage => :s3} 

然後在後面你的應用,只需要詢問ATTACHMENT_OPTIONS [:storage] - 在你的應用中沒有if/else。

+0

非常感謝Jesse! :) –

8

Rails.env會給你你在找什麼。

您還可以使用

Rails.env.development? 
Rails.env.test? 
Rails.env.production? 
Rails.env.your_custom_environment? 

爲了測試這些特定的環境。

+0

謝謝!我必須將測試放入模型中,並且使用Netbeans時,我總是遇到錯誤。這裏的代碼: has_attached_file:avatar, :path =>「:attachment /:id /:style。:extension」, :url =>「/:附件/:id/:style.:extension」, : default_url =>'/:attachment/missing_:style.jpg', :styles => {:small =>「80x80>」,:thumb =>「100x100>」}, if(Rails.env.development?or Rails.env.test) :存儲=>:文件系統 別的 :存儲=>:S3 端 :default_style =>:拇指, :桶=> 'josha_pictures', :s3_credentials => { : access_key_id => ENV ['S3_KEY'], : –

+0

什麼是錯誤?你會介意編輯你的問題並把代碼放在那裏嗎? –

+0

爲什麼不使用三元運算符而不是if/else? :storage =>(Rails.env.development?|| Rails.env.test?)? :filesystem::s3 –