如何configuration回形针保存到不同的目录取决于环境

我在一个应用程序上进行合作,偶尔会遇到麻烦,原因是原来的开发人员在linux下工作,而我在OSX上。 我目前的问题与使用ImageMagik和回形针上传图像有关。 当我尝试上传照片到应用程序,我收到以下消息。

Permission denied - /assets 

我很确定这意味着应用程序想要保存在资产目录中的某个地方的图像,但不能,因为它不存在于我的机器上。

在模型中,这是解决图片的代码。

 has_attached_file :avatar, :url => "/avatars/:id?style=:style", :styles => { :large => "190x190#", :medium => "70x70#", :thumb => "106x106#" }, :path => "/assets/rob/images/Users/:id/:style/:basename.:extension" 

现在,我假定这个目录存在于原始程序员的计算机上,以及该网站的托pipe位置。 但是我没有那个目录,所以我这样做了:

  :path => "~/robotimus/dev_images/:id/:style/:basename.:extension" 

但现在我陷入困境,因为在部署之前,我最终必须恢复这条线。 作为一个解决scheme,我可以写一个像这样的方法。

 def images_path Rails.env.production? ? "/assets/rob/images/Users/" : "~/robotimus/dev_images" end 

然后:path行如下所示:

  :path => images_path + "/:id/:style/:basename.:extension" 

这听起来像个好主意吗? 另外,这个方法应该存储在哪里? 我的猜测是,它属于config / environment.rb,但我想获得专家的意见。

我之前为一个项目做了类似的事情,在开发中我在本地存储图像,但在生产环境中,它们存储在Amazon S3上。

我所做的是我创建了一个config/paperclip.yml

 # config/paperclip.yml common: &common :styles: :thumb: "50x50#" :small: "80x80#" :medium: "200x150#" :normal: "320x240#" :large: "800x600#" :default_url: "/images/default_image.png" development: <<: *common production: <<: *common :storage: :s3 :bucket: "your-bucket-name" :path: "/:some/:path/:id" :url: "s3_domain_url test: <<: *common 

然后,我将该文件加载到我的应用程序配置中

 # config/initializers/config.rb require 'ostruct' def load_config_yaml(config_file) YAML.load(File.read(Rails.root.join('config', config_file)))[Rails.env] end AppConfig = OpenStruct.new(load_config_yaml('application.yml')) AppConfig.paperclip = load_config_yaml('paperclip.yml') 

然后我只提供了与AppConfig.papercliphas_attached_file调用。

 # app/models/image.rb class Image < ActiveRecord::Base has_attached_file :photo, AppConfig.paperclip end 

所以,如果你想存储文件在不同的路径(但仍然是本地),只是不要使用S3的东西。

你当然可以跳过大部分的配置,只需要在某个配置中设置映像路径,如果你不想全部使用这个想法,但是我喜欢配置单独的配置。