2012-03-21 30 views
5

Tôi có ứng dụng Rails3 sử dụng Carrierwave và Fog để lưu trữ dữ liệu vào S3 của Amazon. Ứng dụng này tôi đang xây dựng yêu cầu tôi cho phép mỗi người dùng có thùng EC2 an toàn của riêng họ. Tiền đề của ứng dụng là người dùng sẽ tạo một tài khoản (phát sinh) và tôi sẽ tạo một nhóm lưu trữ chỉ dành cho người dùng đó trong Người dùng và mật khẩu EC2 của ứng dụng của tôi. Dựa trên tài liệu hiện tại, tôi chưa thấy một cách để có nhiều nhóm vì điều này được cấu hình trong YML FOG. Tôi muốn yêu cầu các lựa chọn thay thế để đặt FOG_DIRECTORY động này dựa trên các thuộc tính của người dùng.Tùy chọn nhóm EC2 động cho sương mù/Carrierwave

Tôi biết có một cách để quản lý thư mục động, nhưng điều này sẽ không hoạt động khi tôi cần nhóm chuyên dụng của người dùng.

Cảm ơn trước!

+0

Bạn có thể giải thích tại sao bạn không thể sử dụng thư mục động không? Người dùng của bạn có cần truy cập trực tiếp, không phải thông qua ứng dụng của bạn không? Nếu không, các url đã đăng ký hoạt động tốt. –

+0

Hiện tại Danh bạ FOG được đặt trong yML sương mù của tôi. Tôi muốn lưu trữ id nhóm ở cấp người dùng. Khi tôi cần lưu trữ một số thông tin, tôi sẽ tra cứu người dùng và tìm id nhóm để sử dụng. Vấn đề của tôi là làm thế nào để thiết lập thư mục này sương mù bên ngoài cấu hình yml? – Gregg

Trả lời

3

Giả sử các nhóm của bạn đã tồn tại. Hãy thử như sau:

#config/initializers/carrierwave.rb 

CarrierWave.configure do |config| 
    #...other configuration stuff... 
    config.fog_directory = 'null.example.com' 

    config.fog_host = proc do 
    proc do |file| 
     uploader = file.instance_variable_get :@uploader 
     "http://#{uploader.fog_directory}" 
    end 
    end 
end 

Note procs lồng nhau, như các văn bản của các này trả lời các tài liệu cho carrierwave là không chính xác. Nếu bạn muốn fog_host hoạt động, bạn phải bọc proc để lớp cấu hình của carrierwave thực hiện đúng.

Mặc dù fog_directory được đặt động sau này. Khung kiểm tra và phàn nàn như vậy nếu một cái gì đó không được thiết lập trong initializer (nó hoạt động chính xác các thiết lập luôn luôn ghi đè).

#app/controllers/application_controller.rb 

before_filter :set_bucket 

def set_bucket 
    CarrierWave.configure do |config| 
    config.fog_directory = "#{current_user.id}.bucket.example.com" 
    end 
end 

Thay đổi hàm set_bucket cho phù hợp với quy ước đặt tên nhóm của bạn.

Bạn có thể thêm một số logic có điều kiện nếu bạn muốn một nhóm cố định đang phát triển thay vì một nhóm cho mỗi người dùng.

Ngoài ra this bài đăng trên blog phác thảo một cách tiếp cận khác.

Các vấn đề liên quan