Trong ứng dụng Rails của tôi, tôi cho phép người dùng tải lên hình ảnh khi họ tạo "bản phát hành" và nó sẽ tải trực tiếp lên S3. Tôi nhận được lỗi sau trong cả phát triển và sản xuất."thiếu yêu cầu: tùy chọn thùng" cho Paperclip/S3
EDIT: Tôi nên lưu ý rằng lỗi này xảy ra khi cố tải lên từ trang chỉnh sửa bản phát hành khi gửi biểu mẫu.
ArgumentError in ReleasesController#update
missing required :bucket option
Rails.root: /Users/jasondemeuse/pressed
Tôi đã thực hiện việc này trước đây mà không gặp vấn đề gì khi sử dụng Carrierwave, nhưng không thể hiểu tôi đang làm gì khi sử dụng Paperclip. Tất cả các bản sửa lỗi tôi đã thấy trên SO và ở nơi khác là các vấn đề về heroku, nhưng tôi cũng gặp phải vấn đề tương tự về phát triển và không có bản sửa lỗi nào đã giúp.
Dưới đây là các mã có liên quan ("..." chỉ ra không đoạn có liên quan):
development.rb
Appname::Application.configure do
...
config.paperclip_defaults = {
:storage => :s3,
:s3_protocol => 'http',
:s3_credentials => {
:bucket => ENV['AWS_BUCKET'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
end
production.rb
Appname::Application.configure do
...
config.paperclip_defaults = {
:storage => :s3,
:s3_protocol => 'http',
:s3_credentials => {
:bucket => ENV['AWS_BUCKET'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
end
phát hành .rb
class Release < ActiveRecord::Base
attr_accessible ... :banner
belongs_to :user
has_attached_file :banner, styles: {
thumb: '100x100>',
square: '200x200#',
medium: '300x300>',
spread: '1200x200'
}
has_many :banners, :dependent => :destroy
accepts_nested_attributes_for :banners, :allow_destroy => true
end
show.html.erb
<%= image_tag @release.banner.url(:medium) %>
<%= @release.banner.url %>
// Have both of these in for now to see if they work, but since the upload isn't working it's giving me the missing.png
_form.html.erb
<%= f.label "Add A Banner?" %><br />
<%= f.file_field :banner %>
Heroku cấu hình (có cùng trong .bash_profile cho sự phát triển)
AWS_ACCESS_KEY_ID: XXXXXXXXXXXXXXXX
AWS_BUCKET: appname
AWS_SECRET_ACCESS_KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXX
EDIT: Dưới đây là của tôi phần liên quan của bộ điều khiển của tôi quá
def update
@release = Release.find(params[:id])
respond_to do |format|
if @release.update_attributes(params[:release])
format.html { redirect_to [@user,@release], notice: 'Release was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @release.errors, status: :unprocessable_entity }
end
end
end
Tôi biết điều này nên cực kỳ đơn giản và tôi chắc chắn rằng tôi chỉ quên một cái gì đó rõ ràng, nhưng tôi đã được đi qua this walkthrough cũng như các bản sửa lỗi tôi đã tìm thấy và không có gì có vẻ hiệu quả. Có một nhiệm vụ cào hoặc bó mà tôi quên chạy hay cái gì đó?
Cảm ơn bạn trước!
CHỈNH SỬA 2: Câu trả lời dưới đây đã giúp tôi rất nhiều và chuyển sang đá quý fog
cố định hầu hết mọi thứ cho tôi. Chỉ trong trường hợp những người khác đang có những vấn đề tương tự, tôi cũng đã có một vấn đề khác đã làm cho một trong những điều này gây nhầm lẫn cho tôi. Nếu bạn gặp vấn đề về heroku và số Paperclip::PaperclipError (Item model missing required attr_accessor for 'image_file_name'):
, hãy đảm bảo bạn chạy heroku rake db:migrate
sau đó khởi động lại heroku với heroku restart
. Tôi đã tải lược đồ của mình và giả định sai rằng tôi sẽ không cần phải làm điều đó.
Câu trả lời SO với bên trên can be found here.
Bạn đang sử dụng phiên bản kẹp giấy nào? – gregates
3.4.2 - Tôi có kẹp giấy "đá quý" "," ~> 3.0 "trong Gemfile của tôi. – Jason
Tôi đoán một điều cần thử là chạy 'AWS_BUCKET = appname rails server' và xem bạn vẫn gặp lỗi. – gregates