Я развернул приложение 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), и проблемы с правами доступа к кэшируемому файлу больше не возникают.