2011-07-30 40 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 –