2017-01-26 3 views
1

Я изо всех сил пытаюсь получить доступ к файлам на S3 с помощью Carrierwave.Файл загрузки и доступа Carrierwave на S3

В моем загрузчике файл doc_uploader.rb У меня есть следующий код

storage :file 
def store_dir 
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
end 

в uplooad «документ» модель определяется как следовать

class Doc < ActiveRecord::Base 
belongs_to :user 
mount_uploader :doc, DocUploader 
end 

Чтобы получить доступ к закачанному файлу У меня есть следующая строка код в контроллере

@doc = current_user.docs.order("created_at").last #last file uploaded by user 
io = open("#{Rails.root}/public" + @doc.doc.url) 

Все работает отлично на месте. Теперь я хочу переместить файл в S3 в пользователя я использую туман и заменить

storage :file 

по

storage :fog 

настраиваю мой конфигурационный файл carrierwave.rb и загрузка работает отлично. Однако, чтобы получить доступ к файлу я пытаюсь использовать

@doc = current_user.docs.order("created_at").last 
io = open("#{@doc.doc.url}") 

и я получаю следующее сообщение об ошибке

No such file or directory @ rb_sysopen - /uploads/doc/doc/11/the_uploaded_file.pdf 

Может кто-нибудь дать мне правильный синтаксис для доступа к файлу на S3, пожалуйста? Благодарю.

+0

У меня есть один вопрос, была ли запись документа сохранена до изменения хранилища: туман? – kurenn

+0

Да, запись документа была сохранена. – Bastien

ответ

0

При обращении актива через консоль, это дает вам только путь, вам, возможно, придется приложить к Протоколу & хоста к @doc.doc.url, что-то вроде:

io = open("http://example.com#{@doc.doc.url}") 

Или вы можете установить URL активов на окружение вам нужно, но это на самом деле не нужно:

config.asset_host = 'http://example.com' 

Это относится только если вы используете консоль, на любом веб-просмотра, это не будет применяться, carrierwave, кажется, справиться с этим

Смежные вопросы