Как сохранить 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

Надеюсь, это поможет.

Другие вопросы по тегам