Theo như tôi biết có hai điều có thể xảy ra ở đây:
1) Thư mục bạn đang tiết kiệm hình ảnh của bạn để không đã đọc đặc quyền/ghi cho những người dùng khác.
Để khắc phục:
terminal
$ cd [my_app]
$ chmod -R 666 tmp
$ chmod -R 666 public/uploads
hoặc nếu bạn đang lưu hình ảnh của bạn trong một thư mục riêng:
$ chmod -R 666 private/uploads
Chúng tôi đang sử dụng 666 trên 777. 666 cho phép đọc và ghi các đặc quyền vào một thư mục, và carrierwave cần ghi hình ảnh của nó. 777 cho phép đọc, ghi các đặc quyền và cho các tệp thi hành được thực hiện! Nói cách khác, một chương trình khó chịu có thể được tải lên máy chủ của bạn được ngụy trang làm hình ảnh nếu bạn đang sử dụng 777. Mặc dù danh sách trắng mở rộng của carrierwave giải quyết vấn đề này, bạn nên luôn sử dụng 666 trên 777.
2) Bạn không sử dụng các chuỗi được trích dẫn kép trong phương thức store_dir
.
Để khắc phục:
app/example_uploader.rb
class BaseUploader < CarrierWave::Uploader::Base
# other methods removed for brevity
def store_dir
"#{Rails.root}/private/" # works perfectly. Many thanks to @RGB
end
end
Chỉ muốn chỉ ra cách tinh tế này là. Bạn cần chuỗi được trích dẫn kép và Rails.root
! Tôi đã làm điều này:
def store_dir
Rails.root + '/private' # raises Errno::EACCES error
end
và hoàn toàn không hoạt động. Rất tinh tế. Cộng đồng nên giải quyết vấn đề này.
là heroku này hoặc một dịch vụ khác? –
là một ứng dụng sử dụng ActiveAdmin. Nó sử dụng CarrierWave để tải tệp lên. Tôi sử dụng Apache và Hành khách. – leonel
Tôi đã nhận được 'Errno :: EACCESS' trên'/uploads' .. sửa lỗi của tôi là thêm '# {Rails.root}/public /' vào phương thức 'store_dir'. :) Hy vọng rằng sẽ giúp một ai đó! – RGB