Tôi có một thùng S3 để sản xuất và phát triển. Tôi đã thực hiện nghiên cứu của mình và came across this post nhưng cấu hình hiện tại của tôi không hoạt động như mong đợi. Tôi nhận được ngoại lệ sau (phía dưới) tại địa phương và tôi không nhận được tập tin tải lên xô S3 của tôi từ ứng dụng Heroku tôi:howto: Thiết lập cơ bản của sóng mang [Heroku và 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 %>
Tuy nhiên Khi tôi đặt storage :file
bên trong của tập tin *_uploader.rb
mọi thứ hoạt động như mong đợi tại địa phương. Nhưng vẫn còn lưu ý bao giờ được gửi đến thùng S3 của tôi.
Dưới đây là bộ của tôi lên:
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
cuối
CẬP NHẬT Nhờ @ CanBerkGüder tôi có thể xác nhận rằng tôi có thể lưu các bản ghi nhưng không phải là tập tin hình ảnh. Bất cứ khi nào tôi cố gắng tạo đối tượng người dùng, nhật ký heroku của tôi phun ra:
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
Hai điều cần kiểm tra: 1. là đá quý 'sương mù' được liệt kê trong Gemfile của bạn? 2. Nếu có, hãy thử chỉ định config.storage =: fog trong bộ khởi tạo. –
@ CanBerkGüder Tôi cập nhật trình khởi tạo của mình và vẫn không có may mắn, vui lòng xem phần CẬP NHẬT cho những gì đã xảy ra sau khi tôi cập nhật. – rhodee
Cấu trúc thư mục không quan trọng, như các tài liệu nói, đơn giản vì không có thư mục trên S3 (nó chỉ là một tập tin có tên uploads/user/avatar/1/2_48x48.png). Rất tiếc, tôi không thể nghĩ ra lý do thứ ba có thể gây ra lỗi mà bạn đang gặp phải. –