Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails nginx 403 Rails 4中禁止的错误(没有index.html文件)_Ruby On Rails_Nginx_Vagrant - Fatal编程技术网

Ruby on rails nginx 403 Rails 4中禁止的错误(没有index.html文件)

Ruby on rails nginx 403 Rails 4中禁止的错误(没有index.html文件),ruby-on-rails,nginx,vagrant,Ruby On Rails,Nginx,Vagrant,我正在跟随一位铁路专家关于在流浪者上设置Nginx和Unicorn,有一个重要的区别。Ryan正在使用Rails 3制作他的应用程序(Rails 4只动态生成默认的/public/index.html)。安装并运行Nginx后,我们可以在端口8080上看到默认页面。然后,我们为Nginx创建了一个基本配置文件,将其放入rails应用程序的config目录中 /config/nginx.conf server { listen 80 default; # server_name example

我正在跟随一位铁路专家关于在流浪者上设置Nginx和Unicorn,有一个重要的区别。Ryan正在使用Rails 3制作他的应用程序(Rails 4只动态生成默认的/public/index.html)。安装并运行Nginx后,我们可以在端口8080上看到默认页面。然后,我们为Nginx创建了一个基本配置文件,将其放入rails应用程序的config目录中

/config/nginx.conf

server {
 listen 80 default;
 # server_name example.com;
 root /vagrant/public; 
}
然后删除“已启用站点”中的默认页面,并将其符号链接到配置文件

vagrant@lucid32:/etc/nginx/sites-enabled$ sudo rm default 
vagrant@lucid32:/etc/nginx/sites-enabled$ sudo ln -s /vagrant/config/nginx.conf todo 
在此之后,Ryan重新启动了nginx,并能够在localhost:8080上看到Rails索引页面。然而,当我访问localhost:8080时,我得到一个403禁止的错误

403 Forbidden
nginx/1.1.19
更新

由于Rails 4不再具有public/index.html文件,我认为403错误可能是由该文件引起的,正如我从这篇博文中了解到的 . 它说在配置中将autoindex设置为
on
(默认设置为off),但我不确定如何设置它以显示Rails主页

当我这么做的时候

server {
 listen 80 default;

 root /vagrant/public; 
 location / {
               autoindex on;
        }
}
它消除了403权限错误(耶!),但是,它没有显示默认的Rails主页。相反,它显示的是目录结构,所以我想知道设置它的正确方法是什么

如果我尝试将其设置为location/public,则会再次出现403错误。有什么想法吗

location /public {
                   autoindex on;
            }
更新

因为我使用的是Vagrant(虚拟框),所以应用程序位于/Vagrant中,但是将location设置为location/Vagrant也会导致403错误

location /vagrant {
               autoindex on;
        }

您需要将请求从Nginx传递给Unicorn。您可以这样做:

server {
  listen *:80;
  root /vagrant/public;

  location / {
    # Serve static files if they exist, if not pass the request to rails
    try_files $uri $uri/index.html $uri.html @rails;
  }

  location @rails {
    proxy_redirect    off;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_set_header  Host              $http_host;
    proxy_set_header  X-Real-IP         $remote_addr;

    proxy_pass http://127.0.0.1:8080;
  }
}

您可能需要更改
proxy\u pass
url。默认情况下,unicorn将在127.0.0.1:8080上侦听,但是,如果您更改了该端口,则需要指定该端口。

每个端口都有一个修复程序?我可以复制这一切!