Использование Paperclip для загрузки файлов на S3 - PullRequest
0 голосов
/ 23 июня 2018

Я пытался настроить Paperclip, чтобы мы могли отправлять файлы на S3. Я не очень знаком с S3 или Paperclip, поэтому я следовал этому уроку здесь https://devcenter.heroku.com/articles/paperclip-s3, но столкнулся с некоторыми проблемами. Насколько я могу судить, я точно следовал инструкциям, но получаю сообщение об ошибке, когда нажимаю кнопку «Отправить» после прикрепления файла (в данном случае SpringPictures_FrontSlider.jpg):

"Скрепка :: AdapterRegistry :: NoHandlerError в DprojectsController # create"

"Не найден обработчик для" SpringPictures_FrontSlider.jpg "

и проблема с этой строкой в ​​контроллере:

"@ dproject = Dproject.new (dproject_params)"

Мне интересно, что происходит не так. Спасибо за любую помощь! Вот и весь мой код - просто потому, что я точно не знаю, где возникает проблема. Скаффолд, который я использую, это "dprojects", и я перенес вложение, чтобы его просто называли "вложением".

Gemfile:

source 'https://rubygems.org'
gem 'aws-sdk', '~> 1.6.0'
gem "paperclip", "~> 4.3"

конфиг / окружающей среды / production.rb:

config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['S3_BUCKET_NAME'],
    :access_key_id => ENV['ACCESS_KEY'],
    :secret_access_key => ENV['SECRET_KEY']
    }
  }

dproject.rb (модель):

class Dproject < ActiveRecord::Base
has_attached_file :attachment, styles: {
        thumb: '100x100>',
        square: '200x200#',
        medium: '300x300>'
    }

    validates_attachment_content_type :attachment, :content_type => /\Aimage\/.*\Z/

Миграция:

class AddAttachementToDprojects < ActiveRecord::Migration
  def self.up
    add_attachment :dprojects, :attachment
  end

  def self.down
    remove_attachment :dprojects, :attachment
  end
end

_formNew.html.erb (просмотреть):

<%= form_for @dproject, :html => {:multipart => true} do |f| %>
    <div class="field">
      <%= f.file_field :attachment %>
      <%= f.submit class: "btn btn-primary", id: "submit" %>
    </div>
<% end %>

dprojects_controller.rb (контроллер):

def create
    @dproject = Dproject.new(dproject_params)

    if @dproject.save
      redirect_to @dproject, notice: 'File successfully attached'
    else
      render action: 'new'
    end
end

private

def dproject_params
      params.require(:dproject).permit(:scode, :description, :requested_by, :assigned_to, :completed_at, :order_num, :contact, :contact_email, :ptype, :due_date, :must_date, :print_date, :proofs_out, :proofs_in, :status, :delivery_type, :route, :delivery_date, :tracking_number, :shipping_instructions, :invoicing, :delivered, :printing_instructions, :project_changes, :invoice_quantity, :invoice_price, :project_path, :attachment)
    end
end

конфиг / Инициализаторы / paperclip.rb:

Paperclip::Attachment.default_options[:storage] = :s3
Paperclip::Attachment.default_options[:s3_protocol] = 'https'
Paperclip::Attachment.default_options[:s3_credentials] = 
  { :bucket => ENV['S3_BUCKET_NAME'],
    :access_key_id => ENV['ACCESS_KEY'],
    :secret_access_key => ENV['SECRET_KEY'] }
...