Назад | Перейти на главную страницу

Разрешения для файлов по умолчанию (Passenger, Rails, Ubuntu Server)

Я развернул приложение Rails, которое использует кеширование страниц и запускается через Passenger на сервере Ubuntu. Кэширование Rails просто использует Ruby File.open для записи кешированных файлов.

К сожалению, эти файлы записываются в режиме 666. umask для всех соответствующих учетных записей - 022. Что еще я могу проверить, чтобы определить причину этого?

Заранее спасибо.

В вашем случае вы захотите изменить свой файл Apache httpd.conf, чтобы изменить RailsRuby кому:

RailsRuby /usr/local/bin/ruby_with_env

А затем создайте файл /usr/local/bin/ruby_with_env с этим содержанием:

#!/bin/bash
umask 022
/usr/bin/ruby $*

Тогда обязательно сделай chmod 755 /usr/local/bin/ruby_with_env поэтому сценарий оболочки является исполняемым, а затем сообщает Apache перезагрузить его конфигурацию.

Кроме того, это, конечно, предполагает, что вы установили ruby ​​в /usr/bin, но если он у вас находится в другом месте, вы захотите изменить строку на /path/to/ruby $* или более общий /usr/bin/env ruby $* который будет искать ruby ​​на пути Apache.

Обсуждение под названием Настройка umask для пользователя rails предложил аналогичное решение:

> I'd like to set umask to 002 for the user running the rails processes. 
> However, passenger ignores the value set in ~/.profile (or set in 
> environment.rb via File.umask). 

I would set it in a wrapper script that sets enviroment stuff and then
invokes ruby; use this wrapper script as the target of your 
PassengerRuby/RailsRuby parameter. See this blog post for an example:

http://blog.rayapps.com/2008/05/21/using-mod_rails-with-rails-applications-on-oracle/

У нас была та же проблема, и проблема заключалась в том, что мы запускали Passenger как автономный процесс, размещенный на nginx. Мы переустановили Passenger как общесистемный модуль Apache (в данном случае - версию 3.0.11), и проблемы с правами доступа к кэшируемому файлу больше не возникают.