Ruby on rails “的目录索引”&引用;禁止

Ruby on rails “的目录索引”&引用;禁止,ruby-on-rails,ruby,macos,nginx,passenger,Ruby On Rails,Ruby,Macos,Nginx,Passenger,我正在尝试让phusion passenger和nginx在MacOSX上运行。这是非常困难的 我严格按照指示去做 然后它告诉我: 要激活Phusion乘客,请将其添加到 /usr/local/etc/nginx/nginx.conf,在“http”上下文中: passenger\u root/usr/local/opt/passenger/libexec/src/ruby\u supportlib/phusion\u passenger/locations.ini; 乘客_ruby/usr/b

我正在尝试让phusion passenger和nginx在MacOSX上运行。这是非常困难的

我严格按照指示去做

然后它告诉我:

要激活Phusion乘客,请将其添加到 /usr/local/etc/nginx/nginx.conf,在“http”上下文中:
passenger\u root/usr/local/opt/passenger/libexec/src/ruby\u supportlib/phusion\u passenger/locations.ini; 乘客_ruby/usr/bin/ruby

有趣的是,这不是我的网站使用的ruby。我使用rvm并生成了一个
.versions.conf
文件:

rvm --create --versions-conf use ruby-2.1.2@core
因此,当您将cd刻录到站点的“我的根文件夹”时,您将获得以下信息:

$ rvm-prompt
ruby-2.1.2@core
这就是我添加到nginx.conf的内容:

http {
  ...
  passenger_root /usr/local/opt/passenger/libexec/src/ruby_supportlib/phusion_passenger/locations.ini;
  passenger_ruby /Users/dviglione/.rvm/gems/ruby-2.1.2@core/wrappers/ruby;
请注意,当我运行乘客配置时,它确实为locations.ini提供了不同的位置:

$ /usr/local/bin/passenger-config --root
/usr/local/Cellar/passenger/5.0.26/libexec/src/ruby_supportlib/phusion_passenger/locations.ini
我不知道哪个位置是正确的,但我坚持使用它在安装过程中提供的位置。如果我换到另一个位置,我会遇到另一个问题:“无法访问此站点”

在nginx.conf中,我的服务器块如下所示:

server {
    rack_env development;
    listen       8080;
    server_name  mysite_development;
    root /Users/myuser/projects/core;
    access_log /Users/myuser/projects/core/log/nginx_access.log;
    error_log /Users/myuser/projects/core/log/nginx_error.log;
    passenger_enabled on;
}
我在/etc/hosts中添加了以下内容:

 127.0.0.1       mysite_development
 255.255.255.255 broadcasthost
 ::1             localhost 
 fe80::1%lo0     localhost
根目录具有以下权限:

$ ls -ld core
drwxr-xr-x  37 myuser  CORP\Domain Users  1258 Oct 14 18:45 core
然而,当我导航到时,我在nginx错误日志中得到以下错误:

2016/10/14 18:52:23[错误]90766#0:*1的目录索引 “/Users/myuser/projects/core/”被禁止,客户端:127.0.0.1, 服务器:mysite_开发,请求:“GET/HTTP/1.1”,主机: “mysite_开发:8080”

问题不在于nginx本身,因为我创建了一个测试文件夹并在其中放置了index.html,然后为此创建了一个服务器块,index.html成功地显示在浏览器中。所以问题不是出在乘客身上,就是出在轨道上

注意:如果我将其添加到服务器块:

    location / {
        root   html;
        index  index.html index.htm;
    }
然后我就得到了“欢迎来到nginx!”页面

我甚至递归地查看Rails应用程序的整个目录及其文件。仍然得到403禁止的错误。这一定是乘客的问题


如何解决这个问题?

您需要使用
passenger\u app\u root
指令明确指定Rails应用程序的实际Ruby代码所在的位置,如中所述


有关更多详细信息,请参阅my.

运行NGINX的用户是谁?您可能递归地使用了
chmod 777
,但目录的所有权没有改变。当Nginx试图进入
/User/myuser/projects/core/
时,它必须首先访问
/User/
。因为它没有这样做的权限,所以您可以使用403。
    location / {
        root   html;
        index  index.html index.htm;
    }