Nella mia app Rails permetto agli utenti di caricare un'immagine quando creano un "rilascio" e devono caricare direttamente su S3. Sto ottenendo il seguente errore sia nello sviluppo che nella produzione."missing required: bucket option" per Paperclip/S3
EDIT: Si noti che questo errore si verifica quando si tenta di caricare dalla pagina di modifica del rilascio sul modulo di invio.
ArgumentError in ReleasesController#update
missing required :bucket option
Rails.root: /Users/jasondemeuse/pressed
ho fatto prima senza problemi utilizzando Carrierwave, ma non riesco a capire quello che sto facendo male, ora che sto usando Paperclip. Tutte le correzioni che ho visto su SO e altrove sono problemi di heroku, ma sto avendo lo stesso problema sullo sviluppo e nessuna delle correzioni ha aiutato.
Ecco il codice corrispondente ("..." indica non frammenti rilevanti):
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
rilascio .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 config (lo stesso in .bash_profile per lo sviluppo)
AWS_ACCESS_KEY_ID: XXXXXXXXXXXXXXXX
AWS_BUCKET: appname
AWS_SECRET_ACCESS_KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXX
EDIT: Ecco la mia la parte rilevante del mio controller troppo
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
So che questo dovrebbe essere estremamente semplice e sono sicuro che ho appena dimenticato una cosa ovvia, ma mi è stato andare oltre this walkthrough così come le correzioni che ho trovato e niente sembra funzionare. C'è un rake task o bundle che ho dimenticato di eseguire o qualcosa del genere?
Grazie in anticipo!
EDIT 2: Le risposte sotto di me ha aiutato molto, e il passaggio ai fog
gemma maggior parte delle cose fissati per me. Nel caso in cui altri stiano avendo questi stessi problemi, ho anche avuto un altro problema che mi ha confuso. Se hai problemi con heroku e un Paperclip::PaperclipError (Item model missing required attr_accessor for 'image_file_name'):
, assicurati di eseguire heroku rake db:migrate
quindi riavvia heroku con heroku restart
. Ho caricato il mio schema e ho assunto erroneamente che non avrei avuto bisogno di farlo.
Una risposta SO con sopra can be found here.
Quale versione di graffetta stai usando? – gregates
3.4.2 - Ho 'gem" paperclip "," ~> 3.0 "' nel mio Gemfile. – Jason
Immagino che una cosa da provare sia eseguire 'AWS_BUCKET = appname rails server' e vedere se si ottiene ancora l'errore. – gregates