Как сохранить PDF-файлы креветок в Amazon S3 - PullRequest
5 голосов
/ 11 декабря 2011

У меня проблема с путем.В моей модели у меня есть следующие настройки:

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 ... Все советы будут оценены!

Мэнни, спасибо, Sep

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Вы можете использовать что-то вроде CarrierWave (https://github.com/jnicklas/carrierwave) - это делает загрузку на S3 чрезвычайно простой с библиотекой FOG https://github.com/jnicklas/carrierwave

1 голос
/ 01 августа 2012

Часть пути Users/my_name/my_ruby_root_directory/name_of_my_project/public получена из части пути :rails_root/public, которую вы сконфигурировали в paperclip. Так что если вы действительно хотите, чтобы 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

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

...