Ошибка разрешения кэша Rails

У меня есть приложение Rails (магазин Spree Commerce), работающее в Digital Ocean и развернутое через Cloud 66.

Я хотел бы подключиться к своему серверу по SSH, запустить консоль rails и настроить некоторые параметры конфигурации Spree. Когда я пытаюсь сделать это, я получаю ошибку разрешений:

Errno::EACCES: Отказано в доступе @ dir_s_mkdir - /var/deploy/my-app/web_head/releases/20150220220517/tmp/cache/29B

Согласно странице настроек руководства для разработчиков Spree, это связано с тем, что настройки кэшируются в памяти, чтобы улучшить производительность. Проблема (я думаю) в том, что у моего пользователя нет прав на запись в каталог tmp/cache, и именно мой пользователь запускает консоль rails.

Если я ls -l в каталоге $STACK_PATH/tmp/cache, я получаю следующее:

> lrwxrwxrwx 1 nginx nginx 43 Feb 20 22:05
> tmp/cache ->
> /var/deploy/my-app/web_head/shared/cache

Я полагаю, что мне нужно предоставить моему пользователю доступ на запись к каталогу, как у пользователя nginx. Я попытался добавить себя в группу пользователей nginx, но это, похоже, не дало никакого эффекта. Что я могу сделать, чтобы предотвратить эту ошибку разрешений?


person michaelmichael    schedule 21.02.2015    source источник
comment
каков результат ls -l /var/deploy/my-app/web_head/releases/20150220220517/tmp/cache?   -  person sites    schedule 21.02.2015
comment
lrwxrwxrwx 1 nginx nginx. $STACK_PATH — это переменная, ссылающаяся на /var/deploy/my-app/web_head/current, которая, в свою очередь, ссылается на последнюю директорию /releases.   -  person michaelmichael    schedule 21.02.2015
comment
может быть, это unix.stackexchange.com/a/1315, что я погуглил, было "разрешения по умолчанию linux"   -  person sites    schedule 21.02.2015


Ответы (1)


Хорошо, я понял это на основе этот вопрос и ответ на Форум поддержки Cloud 66.

Я изменил владельца группы папки кеша на app_writers, группу, частью которой является мой пользователь. В Cloud 66 это можно сделать с помощью хука развертывания. Вот файл yml, который работал у меня:

production:
    after_rails:
        command: chown nginx:app_writers /var/deploy/my-app/web_head/current/tmp/cache && chmod -R 775 /var/deploy/my-app/web_head/current/tmp/cache
        target: rails
        run_on: all_servers
        sudo: true
person michaelmichael    schedule 22.02.2015
comment
Это правильно! Просто обратите внимание, что в Rails 4.2 путь .../current/cache вместо .../current/tmp/cache. Не уверен, когда это изменилось и связано ли это с Rails 4+ или с Cloud66. - person Joshua Pinter; 20.08.2019