Файлы журнала не записываются в (Пассажир)

Локально мое приложение работает нормально и записывает в свои журналы.

На моем производственном сервере работает CentOS, а на сервере Apache работает Passenger. При попытке отладки я заметил, что мои файлы журнала не записываются. Первое, что я сделал, это chmod 0666, и когда я обнаружил, что это не работает, я посмотрел в свой журнал apache. Я нашел это: Ошибка Rails: Невозможно получить доступ к файлу журнала. Убедитесь, что /var/www/vhosts/mysite.com/rails/exp/releases/20091124020342/log/production.log существует и имеет значение chmod 0666. Уровень журнала повышен до WARN, а вывод направляется в STDERR до тех пор, пока не возникнет проблема. фиксированный.

(Примечание: я развертываю с капистрано)

Так или иначе, я погуглил и нашел людей, которые говорили, что это проблема SELinux, поэтому я просмотрел документы пассажира и нашел следующее: http://www.modrails.com/documentation/Users%20guide.html#_my_rails_application_8217_s_log_file_is_not_being_written_to

который в основном говорит: chcon -R -h -t httpd_sys_content_t / path / to / your / rails / app

Однако, когда я указываю правильный путь, я получаю: Операция не поддерживается.

Довольно озадаченный ... есть идеи?


person asdfasdfasdfasdf    schedule 24.11.2009    source источник
comment
Может быть, это будет лучше при сбое сервера? Похоже, это скорее проблема администрирования, чем проблема программирования.   -  person eswald    schedule 24.11.2009
comment
Хорошая идея, поставлю туда. Спасибо   -  person asdfasdfasdfasdf    schedule 24.11.2009


Ответы (2)


Каковы результаты "ls -l" в вашем файле журнала? В Ubuntu я должен убедиться, что acl верны в файлах журнала. Обычно я решаю это, используя

sudo chown -R deploy:deploy /path/to/app

Deploy - это пользователь, в котором вбегает пассажир.

person coreypurcell    schedule 25.11.2009

Я столкнулся с той же проблемой с моим сервером ubuntu 10.x. Вот что я узнал при устранении неполадок.

  • Как упоминалось ранее и в документации, Passenger запускает ruby-процессы rails как владелец файла config / environment.rb. Если вы не сделали что-то особенное, это обычно тот же владелец, что и весь ваш каталог приложений rails. В случае развертывания capistrano это пользователь capistrano.
  • Если environment.rb принадлежит пользователю root (скорее всего, потому, что вы выполняете развертывание как root), пассажир запускает процессы rails как «никто»

Вы можете увидеть, от имени какого пользователя запускаются процессы, с помощью команды top (или любого количества других методов).

В любом случае - мой случай был последним - если процессы rails не могут записывать в файлы журналов, в журналах ничего не отображается (да). Rails проигнорирует ошибку отказа в разрешении и попытается обработать запросы как обычно.

Решение состоит в том, чтобы гарантировать, что процессы ruby ​​rails выполняются от имени того же пользователя, которому принадлежит ваше развертывание rails, файл config / environment.rb, а также каталог и файлы журналов.

Это может быть либо шаг конфигурации деплимента для выбора файлов и каталогов, о которых идет речь, либо настройка apache и указание ему запускать процесс ruby ​​от имени конкретного пользователя (скажем, root, а не кого-либо). Очевидно, что запуск с правами root не рекомендуется, но если вы делаете это по каким-либо причинам и вам нужно видеть, что журналы rails правильно записаны, вы можете сделать это, добавив следующие

# in /etc/apache2/apache2.conf
PassengerDefaultUser root 

Если вы выполняете развертывание не с правами root (что имеет место на другом сервере, который у меня есть), типичный сценарий должен заключаться в том, что каталог приложения rails принадлежит этому пользователю без полномочий root, а пассажир должен запускать процессы rails от имени того же пользователя. . И все должно работать.

[1] person Shyam Habarakada    schedule 01.04.2012