Ruby on rails Nginx拒绝Rails生产服务器缓存权限

Ruby on rails Nginx拒绝Rails生产服务器缓存权限,ruby-on-rails,caching,permissions,nginx,production,Ruby On Rails,Caching,Permissions,Nginx,Production,我已经成功部署了RubyonRails应用程序,并按照《资产管道指南》设置了资产编译和压缩。我的服务器日志中似乎出现了缓存问题 尝试mkdir缓存文件夹时,我的权限似乎被拒绝?这是怎么回事?如何解决此问题? nginx/logs error.log cache: [GET /assets/grid.png] miss cache: [GET /] miss cache error: Permission denied - /var/www/redmeetsblue/releases/201202

我已经成功部署了RubyonRails应用程序,并按照《资产管道指南》设置了资产编译和压缩。我的服务器日志中似乎出现了缓存问题

尝试mkdir缓存文件夹时,我的权限似乎被拒绝?这是怎么回事?如何解决此问题?

nginx/logs error.log

cache: [GET /assets/grid.png] miss
cache: [GET /] miss
cache error: Permission denied - /var/www/redmeetsblue/releases/20120212234112/tmp/cache/B27
/usr/local/rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/fileutils.rb:247:in `mkdir'
/usr/local/rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/fileutils.rb:247:in `fu_mkdir'
/usr/local/rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/fileutils.rb:221:in `block (2 levels) in mkdir_p'
/usr/local/rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/fileutils.rb:219:in `reverse_each'
/usr/local/rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/fileutils.rb:219:in `block in mkdir_p'
/usr/local/rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/fileutils.rb:205:in `each'
/usr/local/rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/fileutils.rb:205:in `mkdir_p'
tmp文件夹用户/权限

ls -alh /var/www/redmeetsblue/current/tmp
total 12K
drwxr-xr-x  3 root root 4.0K 2012-02-12 18:43 .
drwxrwxr-x 13 root root 4.0K 2012-02-12 18:41 ..
drwxr-xr-x  3 root root 4.0K 2012-02-12 18:43 cache
lrwxrwxrwx  1 root root   33 2012-02-12 18:41 pids -> /var/www/redmeetsblue/shared/pids
-rw-r--r--  1 root root    0 2012-02-12 18:41 restart.txt
我的nginx.conf的一部分

http {
    passenger_root /usr/local/rvm/gems/ruby-1.9.3-p0/gems/passenger-3.0.11;
    passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.3-p0/ruby;

    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen            80;
        server_name       173.255.210.212;
        root              /var/www/redmeetsblue/current/public/;
        passenger_enabled on;
      }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

nginx.conf
中设置
user
指令:

user www-data;
然后更新此用户拥有的应用程序权限:

sudo chown -R www-data /var/www/redmeetsblue

注意:还要注意,如果您正在使用capistrano或其他类似的部署系统,您还必须更新该配置以立即使用同一用户。

您的
nginx.conf
中是否有
user
指令?如果不是,我相信默认用户是
www-data
,它显然无权访问
root
的文件。太好了!我没有用户指令-它被注释掉了。我通过删除注释,将名称改为www-data和sudo-chown-R www-data/var/www/redmeetsblue/current/Great解决了这个问题!我将解决方案添加为实际答案=)。请注意,为了保持良好的形式,您可能应该
chown
整个应用程序目录(
redmeetsblue
),而不仅仅是
current
。我把它写在我贴的答案里了。谢谢你,本!为了这件琐碎的评论,我把头发拔了出来