Ho un secchio S3 per la produzione e lo sviluppo. Ho effettuato la mia ricerca e came across this post ma la mia configurazione attuale non funziona come previsto. Ottengo la seguente eccezione (sotto) a livello locale e ottengo alcun file arrivi al mio secchio S3 dal mio Heroku app:howto: Impostazione di base di carrierwave [Heroku e S3]
is not a recognized storage provider
Extracted source (around line #3):
1:
2: <p><%= user.name %></p>
3: <%= image_tag user.avatar.url %>
4: <%= link_to 'Show', user %>
5: <%= link_to 'Edit', edit_user_path(user) %>
6: <%= link_to 'Destroy', user, confirm: 'Are you sure?', method: :delete %>
Tuttavia quando ho impostato storage :file
all'interno del file *_uploader.rb
tutto funziona come previsto a livello locale. Ma notiamo sempre che viene inviato al mio secchio S3.
Qui è la mia messa a punto:
user.rb
class User < ActiveRecord::Base
attr_accessible :name, :avatar, :avatar_cache, :remote_avatar_url, :remove_avatar
mount_uploader :avatar, AvatarUploader
end
fog.rb
CarrierWave.configure do |config|
if Rails.env.production?
config.storage = :fog
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => ENV['S3_K'],
:aws_secret_access_key => ENV['S3_SCRT'],
:region => ENV['S3_RG']
}
config.fog_directory = ENV['S3_BUCKET']
config.fog_host = 'http://www.example.com'
config.fog_public = true # optional, defaults to true
config.fog_attributes = {'Cache-Control' => 'max-age=315576000'} # optional, defaults to {}
else
#for development and testing locally
config.storage = :file
config.enable_processing = false
end
end
* _uploader.rb
class AvatarUploader < CarrierWave::Uploader::Base
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def extension_white_list
%w(jpg jpeg gif png)
end
end
users_controller.rb
def new
@user = User.new
@user.avatar = params[:file]
respond_to do |format|
format.html # new.html.erb
format.json { render json: @user }
end
end
def create
@user = User.new(params[:user])
@user.avatar = params[:file]
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
fine
UPDATE Grazie a @ CanBerkGüder Posso confermare che sono in grado di salvare il record, ma non il file di immagine. Ogni volta che tento di creare un oggetto utente, il mio registro Heroku sputa fuori:
2012-02-20T23:19:45+00:00 app[web.1]: app/controllers/users_controller.rb:46:in `block in create'
2012-02-20T23:19:45+00:00 app[web.1]: app/controllers/users_controller.rb:45:in `create'
2012-02-20T23:19:45+00:00 app[web.1]:
2012-02-20T23:19:45+00:00 app[web.1]: cache: [POST /users] invalidate, pass
Due cose da verificare: 1. è la gemma 'nebbia' elencata nel tuo Gemfile? 2. se lo è, prova a specificare config.storage =: fog nell'inizializzatore. –
@ CanBerkGüder Ho aggiornato il mio inizializzatore e ancora senza fortuna, per favore vedi la sezione AGGIORNAMENTO per quello che è successo dopo che ho aggiornato. – rhodee
La struttura della directory non è importante, come dicono i documenti, semplicemente perché non ci sono directory su S3 (è solo un file chiamato uploads/user/avatar/1/2_48x48.png). Purtroppo, non riesco a pensare a una terza ragione che potrebbe causare l'errore che stai vedendo. –