„Brakujące: opcja wiadra” dla Paperclip / S3
W mojej aplikacji Rails pozwalam użytkownikom przesyłać obraz podczas tworzenia „wydania” i powinien on przesyłać bezpośrednio do S3. Dostaję następujący błąd zarówno w rozwoju, jak i produkcji.
EDYTOWAĆ: Powinienem zauważyć, że ten błąd występuje podczas próby przesłania ze strony edycji wydania w formularzu przesyłania.
ArgumentError in ReleasesController#update
missing required :bucket option
Rails.root: /Users/jasondemeuse/pressed
Zrobiłem to już wcześniej bez żadnych problemów z użyciem Carrierwave, ale nie wiem, co robię źle teraz, gdy używam Spinacza. Wszystkie poprawki, które widziałem na SO i gdzie indziej, są problemami z Heroku, ale mam ten sam problem z rozwojem i żadna z poprawek nie pomogła.
Oto odpowiedni kod („...” oznacza nieistotne fragmenty):
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
release.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 %>
konfiguracja heroku (ma taką samą wartość w .bash_profile dla rozwoju)
AWS_ACCESS_KEY_ID: XXXXXXXXXXXXXXXX
AWS_BUCKET: appname
AWS_SECRET_ACCESS_KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXX
EDYTOWAĆ: Oto moja odpowiednia część mojego kontrolera
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
Wiem, że to powinno być niezwykle proste i jestem pewien, że po prostu zapomniałem czegoś oczywistego, ale przechodziłemten przewodnik jak również poprawki, które znalazłem i nic nie działa. Czy jest jakieś zadanie lub pakiet prowizji, którego zapomniałem uruchomić?
Z góry dziękuję!
EDYCJA 2: Poniższe odpowiedzi bardzo mi pomogły i przestawiły się nafog
gem naprawił większość rzeczy dla mnie. Na wypadek, gdyby inni mieli te same problemy, miałem też inny problem, który sprawiał, że ten problem był dla mnie mylący. Jeśli masz problemy z Heroku iPaperclip::PaperclipError (Item model missing required attr_accessor for 'image_file_name'):
, upewnij się, że uciekaszheroku rake db:migrate
następnie uruchom ponownie Herokuheroku restart
. Załadowałem mój schemat i błędnie założyłem, że nie muszę tego robić.
Odpowiedź SO z powyższymmożna znaleźć tutaj.