在Rails应用程序(Redmine)中使用Thin运行权限被拒绝

我试图用Thin和nginx作为反向代理运行Redmine。

我的/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>' 

我不明白是什么原因导致这个错误。 /var/run/thin/中的.pid文件由root拥有。 我试图给redminethin主人,但得到了同样的错误(这些文件是在重新启动时重新创build)。

我用rbenv安装了Ruby。 我以root用户身份运行bundle install ,提示这样做will break this application for all non-root users on this machine 。 根据这个答案,这不应该是一个问题,应该吗?

编辑:如果我设置用户和组在/etc/thin2.1/redmine.yml root权限被拒绝的错误消失。 我虽然是造成了另一个错误,但仍然有一个。

对于unlink文件权限的过程实际上需要一个权限来写入该文件的目录。

因此,要么给redmine权限写/var/run/thin/要么把pid和套接字放在其他地方 – 通常在应用程序的共享tmp ,rails甚至为这些创建dirs。