Как сохранить PDF-файлы креветок в Amazon S3
У меня проблема с путем. В моей модели у меня есть следующие настройки:
class Pdffiles < ActiveRecord::Base
belongs_to :user
has_attached_file :invoice_file,
:path => ":rails_root/public/pdffiles/:user_id/:style/:basename.:extension",
:url => "/pdffiles/:user_id/:style/:basename.:extension",
:storage => :s3,
:bucket => '...',
:s3_credentials => {
:access_key_id => '...',
:secret_access_key => '...'
}
end
и в контроллере выглядит мое действие это:
pdf = Prawn::Document.new
pdf.move_down 70
pdf.text("Prawn Rocks")
pdf.render_file('prawn.pdf')
pdf_file = File.open('prawn.pdf')
pdff = Pdffile.new()
pdff.pdffile_file = pdf_file
pdff.user_id = todays_user.id
pdff.save
И моя проблема в том, что этот файл PDF хранится на сервере S3, но в плохом месте. Вместо каталога app/public/pdff/id_of_a_user/file_name_of_pdf_file
файл сохранен в
Users/my_name/my_ruby_root_directory/name_of_my_project/public/pdffiles/id_of_a_user/file_name_of_pdf_file
,
Я не совсем уверен, правильно ли я использую креветку для сохранения PDF-файлов, но я думаю, что проблема может быть в контроллере, где я установил место, где должен быть сохранен созданный файл...
Я хотел бы спросить вас, что я должен изменить для сохранения PDF-файлов в правильном каталоге в S3... Все советы будут оценены!
Мэнни спасибо, сентябрь
2 ответа
Вы можете использовать что-то вроде CarrierWave ( https://github.com/jnicklas/carrierwave) - это делает загрузку на S3 чрезвычайно простой с библиотекой FOG https://github.com/jnicklas/carrierwave
Users/my_name/my_ruby_root_directory/name_of_my_project/public
часть пути пришла от :rails_root/public
часть пути, которую вы настроили в скрепке. Так что если вы действительно хотите, чтобы s3 "directory" был app/public/pdff/id_of_a_user/file_name_of_pdf_file
вам нужно дать скрепку следующим путем: app/public/pdffiles/:user_id/:style/:basename.:extension
Также, согласно вашей модели, вы должны использовать pdff.invoice_file = pdf_file
вместо pdff.pdffile_file = pdf_file
Надеюсь, это поможет.