Ruby on rails &引用;“禁止进入”乘客,Nginx,轨道

Ruby on rails &引用;“禁止进入”乘客,Nginx,轨道,ruby-on-rails,nginx,passenger,Ruby On Rails,Nginx,Passenger,我知道这方面有大约100个问题,但经过数小时的研究,我找不到解决办法。这是我的nginx配置: server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /home/LucyRb/public; passenger_enabled on; passenger_app_env production; index index.html ind

我知道这方面有大约100个问题,但经过数小时的研究,我找不到解决办法。这是我的nginx配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /home/LucyRb/public;
    passenger_enabled on;
    passenger_app_env production;

    index index.html index.htm;
    server_name <domain name>;

    location / {
            try_files $uri $uri/ /index.html;
            passenger_enabled on;
    }
}
我不认为这是许可问题。我已经运行了
rakedb:migrate
来创建数据库,它成功了。我非常确定环境设置正确。我得到的只是一个文件列表(因为autoindex处于启用状态,否则我会得到一个403)。但是路由,应用程序默认索引/根也不起作用。我已经阅读了乘客文档,我试着用文档和其他问题进行故障排除,但我似乎无法让它工作

我没有忘记捆绑安装,而且所有合适的软件包都安装好了,我很确定(我忘记了吗?
mysql
rvm
及其安装rails的相关步骤,
nginx
passenger
…可能还有2-3个)

我知道我不应该启动
rails服务器,因为它一次只允许一个连接。所以nginx应该正确地做到这一点,对吗?或者这就是我应该对某些旗帜做的

提前感谢。

建议-
尝试将您的应用程序移动到普通用户可以访问的地方。例如,主目录

您是如何安装passenger的?用RVM?RVMSUDO还是sudo?很可能你不应该将你的应用程序作为root用户使用。因此,文件的权限不允许passenger使用rails应用程序。

假设您的config.ru位于指定的passenger\u app\u根目录中,请尝试删除您的
location/{…}
指令,重新启动nginx,然后查看您的应用程序是否至少启动。我不是说这是一个解决方案,而是一个故障排除措施

我本打算将此内容放在我的评论部分,但空间和格式有限,因此:

我还看到您两次指定
passenger\u enabled
,这似乎是不必要的。我以前从未见过它在
location
指令中打开,但这可能不是您的问题

你的日志怎么说?您似乎没有启用乘客日志记录/调试(在http指令中):

我从您的帖子中注意到的另一件事是,您的公共目录似乎不包含rails应用程序???

# nginx config
root /home/LucyRb/public;

# shell
/var/www/LucyRb/public

在/home/LucyRb中是否有正确的应用程序?如果是,那么/var/www/LucyRb的相关性是什么?如果这是一个错误,在您的配置,那么它可能会导致一些麻烦

您是否尝试将文件更改为www-data-user?

每次我收到该错误时,都是因为Nginx没有正确地指向乘客gem和可执行文件。以下是我的建议,让事情顺利进行:

  • 卸载和/或关闭您当前安装的任何nginx
  • 将cd放入应用程序的根目录
  • 执行命令:
    乘客安装nginx模块
    ,让乘客在
    /opt
    中下载、编译并安装nginx
  • 使用乘客脚本为
    /opt/nginx/conf/nginx.conf
    提供的示例配置
  • 要让服务器在引导时启动,只需在
    /etc/rc.local脚本中添加一行
    /opt/nginx/sbin/nginx

  • 对于我在Ubuntu10和Ubuntu12上运行RVM+Ruby1.9、2.0和Rails3和4来说,这个方法是可重复和简单的。

    好了,各位。在乘客作者在IRC频道的帮助下,我解决了这个问题

    我安装了两次乘客。 从我所关注的文章中,没有充分涵盖主题,我假设PassengerNginx的一个可安装模块,这导致我使用
    apt get
    安装Nginx,并通过gems安装Passenger

    这是不必要的冗余,会导致冲突。 在这些情况下,请仅使用apt-get
    仅使用宝石

    乘客安装nginx模块
    不仅安装模块,而且从头开始编译nginx,这仅仅是因为nginx不是一个可模块化的应用程序。它要么与模块一起编译,要么根本没有模块

    总而言之:
  • 仅使用一种方法安装Nginx&&passenger
  • 确保配置指向正确的文件。
    我还对ruby的路径有问题。确保它指向包装器,而不仅仅是可执行文件:

    root@Lucy:/usr/local/rvm# which ruby
    /usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby
    
    在您的配置中:

    passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p353/ruby;
    

  • 当您转到哪个URL时,访问是被禁止的?任何路由都不起作用。我可以访问404.html,但不能访问控制器和操作。这可能是因为ipv6only标志?您可以尝试将类似的行添加到nginx配置日志`passenger_root/usr/lib/ruby/gems/1.8/gems/passenger-2.2.11;乘客_ruby/usr/bin/ruby1.8;`此外,显示nginx error.log,它通常应位于
    /var/log/…
    中。以下是根据文件说明,nginx.conf:与RVMSUDO可使用的乘客配置选项。我应该卸载并重新安装RVM吗?我也不明白为什么这会是一个问题,因为所有人都可以访问服务器文件,而且乘客/nginx拥有比他们更高的权限…不。还没跑。
    root@Lucy:/usr/local/rvm# which ruby
    /usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby
    
    passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p353/ruby;