将图像存储在本地以用于开发 s3 以用于生产 Rails Paperclip

2024-03-04

我想将图像上传到本地计算机上进行开发,但将它们存储在我的 Amazon S3 帐户上进行生产。

上传.rb

if Rails.env.development?
  has_attached_file :photo, :styles => { :thumb => '40x40#', :medium => '150x200>', :large => '300x300>'},
                            :convert_options => { :thumb => "-quality 92", :medium => "-quality 92", :large => "-quality 92"  },
                            :processors => [:cropper]
else
  has_attached_file :photo, :styles => { :thumb => '40x40#', :medium => '150x200>', :large => '300x300>'},
                            :convert_options => { :thumb => "-quality 92", :medium => "-quality 92", :large => "-quality 92"  },
                            :storage => :s3,
                            :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
                            :path => ":attachment/:id/:style.:extension",
                            :bucket => 'birthdaywall_uploads',
                            :processors => [:cropper]
end

这里有一些代码重复。 有没有一种方法可以在不重复代码的情况下编写此内容。

这是解决方案,非常感谢乔丹和安德烈,如下:

配置/环境/development.rb

   PAPERCLIP_STORAGE_OPTS = {
     :styles => { :thumb => '40x40#', :medium => '150x200>', :large => '300x300>' },
     :convert_options => { :all => '-quality 92' },
     :processor       => [ :cropper ]
   }

配置/环境/生产.rb

  PAPERCLIP_STORAGE_OPTS = {
    :styles => { :thumb => '40x40#', :medium => '150x200>', :large => '300x300>' },
    :convert_options => { :all => '-quality 92' },
    :storage        => :s3,
    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
    :path           => ':attachment/:id/:style.:extension',
    :bucket         => 'birthdaywall_uploads',
    :processor       => [ :cropper ]
  }

另一种解决方案是将带有参数的哈希移至常量,该常量将在 config/environments/*.rb 文件中定义。然后你就可以使用

has_attached_file :proto, PAPERCLIP_STORAGE_OPTS

我认为在定义方法时在模型中使用 if/unless 有点混乱

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将图像存储在本地以用于开发 s3 以用于生产 Rails Paperclip 的相关文章

随机推荐