Обработка разрешений для папок и файлов Paperclip с использованием Ruby on Rails - PullRequest
6 голосов
/ 02 августа 2011

Я работаю Ruby on Rails 3.0.9 в производственном режиме на удаленной машине VPS, работающей Ubuntu 10.04 LTS (в режиме разработки я использую RoR на ОС Mac Snow Snow Leopard) и я хотел бы знать, как управлять следующим сценарием.

Я использую Apache2 и Phusion Passenger , и я настроил виртуальный хост следующим образом:

<VirtualHost *:80>
  ServerName project_name.com
  DocumentRoot /srv/www/project_name.com/public

  <Directory /srv/www/project_name.com/public>
    AllowOverride all
    Options -MultiViews
  </Directory>
</VirtualHost>

Более того, я использую драгоценный камень Paperclip и, как и многие люди в Интернете, использующие его в производственном режиме, я получаю следующую ошибку при обработке файлов (изображений):

Errno::EACCES (Permission denied - /srv/www/project_name.com/public/images/001):
...

Я слышал, что решение во избежание подобных ошибок состоит в том, чтобы правильно установить разрешения для папок (вручную! - Я не знаю, возможно ли автоматизировать этот процесс "установки" ... Кстати: возможно ли это? ?) но я думаю, что есть лучший способ решить это. Если так, что я могу сделать?

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

@ M.Cypher близок, хотя самая большая проблема, которую я вижу, это то, что вы позволяете пользователям загружать произвольные файлы, а затем помечаете их как исполняемые.Это катастрофа, которая ищет место, где должно произойти.

find /srv/www/project_name.com/public -type d -exec chmod 755 {}\;
find /srv/www/project_name.com/public -type f -exec chmod 644 {}\;

Это установит исполняемый файл в каталогах (обязательно), но не в файлах.

1 голос
/ 02 августа 2011

Зачем его автоматизировать, просто требуется простая команда на сервере.

sudo chmod -R 777 /srv/www/project_name.com/public

Редактировать: У меня все образы Paperclip в общей папке, например /srv/www/project/shared/... ЭтоКстати, они не затрагиваются, когда я развертываю новую версию с Capistrano, и мне нужно только установить права доступа к папке (с помощью приведенной выше команды или аналогичной).Вот почему я думаю, что автоматизация не нужна, так как вам нужно запускать команду ровно один раз, а не после каждого развертывания.

Кстати, chmod -R 777 может быть не лучшим выбором, поскольку он без разбора устанавливает каждый файл в каждой подпапкебыть доступным для всех.Это работает, но я уверен, что кто-то с большими навыками Linux может указать, почему менее экстремальная версия будет умнее.

...