2015-12-28 2 views
4

Я пытаюсь запустить Redmine с Thin и nginx в качестве обратного прокси.Разрешение отклонено в приложении Rails (Redmine), работающем с Thin

Мои /etc/thin2.1/redmine.yml:

--- 
pid: /var/run/thin/redmine.pid 
group: redmine 
wait: 30 
timeout: 30 
log: /var/log/thin/redmine.log 
max_conns: 1024 
require: [] 

environment: production 
max_persistent_conns: 512 
servers: 4 
daemonize: true 
user: redmine 
socket: /var/run/thin/redmine.sock 
chdir: /var/www/projects.mydomain.tld 

Когда я получить доступ к сайту с моей веб-браузер я получаю 502 Bad Gateway. Это содержание /var/log/thin/redmine.0.log:

>> Writing PID to /var/run/thin/redmine.0.pid 
>> Changing process privilege to redmine:redmine 
>> Using rack adapter 
>> Exiting! 
/usr/lib/ruby/vendor_ruby/thin/daemonizing.rb:158:in `delete': Permission denied @ unlink_internal - /var/run/thin/redmine.0.pid (Errno::EACCES) 
     from /usr/lib/ruby/vendor_ruby/thin/daemonizing.rb:158:in `remove_pid_file' 
     from /usr/lib/ruby/vendor_ruby/thin/daemonizing.rb:59:in `block in daemonize' 
/usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- bundler/setup (LoadError) 
     from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
     from /var/www/projects.mydomain.tld/config/boot.rb:4:in `<top (required)>' 
     from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
     from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
     from /var/www/projects.mydomain.tld/config/application.rb:1:in `<top (required)>' 
     from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
     from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
     from /var/www/projects.mydomain.tld/config/environment.rb:2:in `<top (required)>' 
     from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
     from /usr/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
     from /var/www/projects.mydomain.tld/config.ru:3:in `block in <main>' 
     from /usr/lib/ruby/vendor_ruby/rack/builder.rb:55:in `instance_eval' 
     from /usr/lib/ruby/vendor_ruby/rack/builder.rb:55:in `initialize' 
     from /var/www/projects.mydomain.tld/config.ru:1:in `new' 
     from /var/www/projects.mydomain.tld/config.ru:1:in `<main>' 
     from /usr/lib/ruby/vendor_ruby/rack/adapter/loader.rb:36:in `eval' 
     from /usr/lib/ruby/vendor_ruby/rack/adapter/loader.rb:36:in `load' 
     from /usr/lib/ruby/vendor_ruby/rack/adapter/loader.rb:45:in `for' 
     from /usr/lib/ruby/vendor_ruby/thin/controllers/controller.rb:169:in `load_adapter' 
     from /usr/lib/ruby/vendor_ruby/thin/controllers/controller.rb:73:in `start' 
     from /usr/lib/ruby/vendor_ruby/thin/runner.rb:185:in `run_command' 
     from /usr/lib/ruby/vendor_ruby/thin/runner.rb:151:in `run!' 
     from /usr/bin/thin:6:in `<main>' 

Я не понимаю, что вызывает эту ошибку. .pid файлов в /var/run/thin/ принадлежат root. Я попытался дать право владения либо redmine, и thin, но получил ту же ошибку (эти файлы воссозданы при перезапуске в любом случае).

Я установил Ruby с rbenv. Я запустил bundle install как root, который подсказал, что делает это will break this application for all non-root users on this machine. Согласно this answer это не должно быть проблемой, не так ли?

EDIT: Если установить пользователя и группу для root в /etc/thin2.1/redmine.yml разрешение отказано ошибка исчезает. Я, хотя и вызывал другую ошибку, но остался.

+0

Что вы имеете в виду? Я новичок в рельсах, но разве это не задача Тонкого? Я не запустил Redmine явно ... –

ответ

4

Для процесса обработки файлов unlink на самом деле требуется разрешение на запись каталога этого файла.

Так что либо дать redmine разрешения на запись /var/run/thin/ или место ИДПА и гнездо в другом месте - как правило, внутри приложения совместно tmp, рельсы даже создают каталоги для них.

+0

Спасибо за объяснение. Для меня это противоречит интуитивно понятным тем, что Thin управляет своими файлами pid с пользователем приложения. Я поместил их в директорию Redmine 'tmp', и теперь она отлично работает. –

+0

Чем меньше кода работает как «root» - тем лучше – Vasfed

Смежные вопросы