Измените путь загрузки Carrierwave, чтобы он соответствовал конфигурации Cloud 66
Развернутое приложение rails с Cloud 66 для digitalocean.com. Все работает нормально, за исключением некоторых ошибок разрешения при попытке загрузки изображений.
Errno::EACCES (Permission denied - /var/deploy/anabol/web_head/releases/20130608104347/public/uploads/tmp):
image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base
...
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
...
end
Есть описание, как решить проблему здесь: https://www.cloud66.com/help/permission_denied_errors
Я изменил путь store_dir:
def store_dir
"#{Rails.root}/tmp/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
Но это не помогло. Я все еще получаю эту ошибку:
» 13:49:25.696 Errno::EACCES (Permission denied - /var/deploy/anabol/web_head/releases/20130608114659/public/uploads/tmp):
Я что-то пропустил?
Редактировать:
Upload работает с этой частью в image_uploader.rb:
def cache_dir
# should return path to cache dir
Rails.root.join 'tmp/uploads/cache'
end
def store_dir
"#{Rails.root}/tmp/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
Но теперь я получаю:
ActionController::RoutingError (No route matches [GET] "/var/deploy/anabol/web_head/releases/20130608164223/tmp/uploads/profile/image/3/thumb_Screenshot_from_2013-06-05_17_27_54.png"):
На виде отображается только путь к изображениям.
2 ответа
Есть способы заставить это работать на хостах, где вы можете загружать файлы. Здесь описаны два способа, но были некоторые ошибки, которые теперь исправляются: https://www.cloud66.com/help/permission_denied_errors
Рабочий пример для ловушки развертывания, использующей carrierwave для загрузки изображения:
#! /bin/bash
#load environment variables
source /var/.cloud66_env
#assign desired permissions
sudo chmod 0777 -R $RAILS_STACK_PATH/public/uploads
И лучшее решение
(таким образом вы не потеряете изображения при повторном развертывании): используйте это в вашем xy_uploader.rb:
def store_dir
"system/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
Я проверил Cloud66:
Этот пользователь (nginx) не имеет повышенных разрешений и не имеет права на запись в вашу файловую систему (кроме явного указания в папки / tmp и $RAILS_STACK_PATH/tmp)
Это означает, что вы не можете загружать файлы для последующего использования в Cloud66 - вам нужно настроить Fog для загрузки на S3 (или любого из провайдеров облачных файлов fog).
Это довольно стандартно для облачных провайдеров. Учебники: