【问题标题】:Paperclip with S3?回形针与 S3?
【发布时间】:2013-08-02 19:55:23
【问题描述】:

所以,我有一个应用程序允许用户上传、评论和投票给歌曲。这些歌曲目前正在 heroku 上托管,但 Heroku 不推荐这样做。因此,我想在 Amazon S3 上托管作为一个强大的替代方案。

但是,我无法使用 Paperclip gem 将文件上传到 S3。到目前为止,我已经注册了我的 AWS 账户并设置了 access_key、secret_key 和 S3 BUCKET。

这是我目前所拥有的:(但它不起作用)。

# config/initializers/paperclip.rb 
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'

song.rb

class Song < ActiveRecord::Base

  acts_as_voteable

  belongs_to :user
  has_many :comments, :dependent => :destroy
  has_many :genre_songs
  has_many :genres, through: :genre_songs

has_attached_file :track,
                  :url  => "/assets/songs/:id/:style/:basename.:extension",
                  :path => ":rails_root/public/assets/songs/:id/:style/:basename.:extension"

  validates_attachment :track, :presence => true

  validates_presence_of :url

  validates :title, length: { minimum: 10 }
  validates :url, length: { maximum: 300 }

  def self.tagged_with(name)
    Genre.find_by_name!(name).songs
  end

  def tag_list
    genres.map(&:name).join(", ")
  end

  def tag_list=(names)
    self.genres = names.split(",").map do |n|
      Genre.where(name: n.strip).first_or_create!
    end
  end
end

production.rb

# config/environments/production.rb
config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['AWS_BUCKET'],
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}

Heroku 命令:

$ heroku config:set AWS_BUCKET=your_bucket_name
$ heroku config:set AWS_ACCESS_KEY_ID=your_access_key_id
$ heroku config:set AWS_SECRET_ACCESS_KEY=your_secret_access_key

show.html.erb

<p>
<%= audio_tag (@song.track.url), controls: "controls", alt: "Please use chrome, ie, or safari", preload: :auto %>   
</p>

【问题讨论】:

  • 老实说,回形针宝石是一坨屎。我建议查看 Carrierwave(有一个“Carrierwave Direct”分支,用于上传到直接 S3 并绕过 Heroku)或 Cloudinary 之类的服务。

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

我有相同的设置(用于图片,但没关系)。对我来说一切都很好,除了我没有像你那样在我的模型中提供:url:path 参数。

【讨论】:

  • 嗯,也许它只在生产中上传到 S3 而不是在开发中?我一直在尝试开发,文件一直在本地上传。
  • 嗯,是的,你是对的!由于您将config.paperclip.defaults = ... 放入config/environments/production.rb
猜你喜欢
  • 2019-12-18
  • 2011-03-27
  • 2011-07-31
  • 2017-04-24
  • 2018-10-01
  • 2012-07-10
  • 2018-07-06
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多