0

そこで、ユーザーが曲をアップロード、コメント、投票できるアプリを用意しました。現在、曲は 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>
4

1 に答える 1

0

私は同じ設定をしています(写真用ですが、気にしないでください)。:urlあなたのようにモデルにand:pathパラメーターを提供しないことを除いて、すべてが私には問題ないように見えます。

于 2013-08-01T18:34:33.563 に答える