Я пытался настроить 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'] }