Я работаю над проектом Ruby on Rails 4, который был развернут в Heroku. В принципе, пользователь должен иметь возможность загружать и загружать звуковые файлы. Загрузка файла была довольно простой. Однако загрузка была странно сложной. Я нашел несколько сообщений о переполнении стека, которые были полезны, но мне все еще нужна помощь.Загрузка звукового файла из AWS с использованием Paperclip
В конфигурации/сред/production.rb:
config.paperclip_defaults = {
:storage => :s3,
:s3_protocol => 'http',
:s3_credentials => {
:bucket => ENV['S3_BUCKET_NAME'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
Моя модель:
class Sound < ActiveRecord::Base
belongs_to :user
# for paperclip
has_attached_file :sound_file,
:s3_domain_url => "bucketname.s3.amazonaws.com",
:bucket => 'bucketname',
:s3_permissions => :public_read,
:encode => 'utf8'
# do not create a sound unless a sound file
# is present
validates_attachment_presence :sound_file
end
Когда пользователь нажимает на это, файл должен быть загружен:
<%= button_to "Download", download_url(sound.id), :method => :get %>
Мой контроллер:
def download
@sound= Sound.find(params[:id])
data = open(@sound.sound_file)
send_data data.read, :type => data.content_type, :x_sendfile => true
end
Когда я смотрю на журналы из Heroku, я вижу это сообщение об ошибке:
Parameters: {"id"=>"5"}
Started GET "/sounds/5/download" for 76.168.22.71 at 2013-11-16 01:22:17 +0000
Processing by SoundsController#download as HTML
Started GET "/sounds/5/download" for 76.168.22.71 at 2013-11-16 01:22:17 +0000
Parameters: {"id"=>"5"}
Processing by SoundsController#download as HTML
Completed 500 Internal Server Error in 6ms
Completed 500 Internal Server Error in 6ms
app/controllers/sounds_controller.rb:40:in `download'
app/controllers/sounds_controller.rb:40:in `download'
TypeError (no implicit conversion of Paperclip::Attachment into String):
TypeError (no implicit conversion of Paperclip::Attachment into String):
Любая идея, что я делаю не так?
Я считаю, что open ожидает '' '' String''', и вы передаете '' 'Paperclip :: Attachment'''. – Nobita