2015-12-28 40 views
4

我試圖用Thin和nginx作爲反向代理運行Redmine。在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 

當我與我的Web瀏覽器訪問該網站,我收到了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>' 

我不明白是什麼原因導致這個錯誤。 /var/run/thin/中的.pid文件歸root所有。我試圖給予redminethin的所有權,但得到了相同的錯誤(這些文件在重新啓動時重新創建)。

我用rbenv安裝了Ruby。我以root身份運行bundle install,因爲這樣做will break this application for all non-root users on this machine。根據this answer這不應該是一個問題,應該嗎?

編輯:如果我在/etc/thin2.1/redmine.yml設置用戶和組root Permission denied錯誤消失。我雖然是在造成另一個錯誤,但那個仍然存在。

+0

你是什麼意思?我是新手,但是這不是Thin的任務嗎?我沒有明確運行Redmine ... –

回答

4

對於unlink文件權限過程實際上需要一個權限來寫入該文件的目錄。

於是要麼放棄寫/var/run/thin/或地方PID和插座別處redmine許可 - 通常是內部應用程序的共享tmp,軌道甚至爲這些創造迪爾斯。

+0

感謝您的解釋。對我來說,Thin與應用程序的用戶管理其pid文件有點直觀。我將它們放在Redmine的'tmp'目錄中,現在它工作正常。 –

+0

「root」運行的代碼越少越好 – Vasfed

相關問題