“禁止访问” - 乘客,Nginx,Rails

时间:2013-12-25 14:00:58

标签: 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 index.htm;
    server_name <domain name>;

    location / {
            try_files $uri $uri/ /index.html;
            passenger_enabled on;
    }
}

我的/public directiory:

root@Lucy:/var/www/LucyRb/public# namei -l *
f: 404.html
-rwxrwxrwx root root 404.html
f: 422.html
-rwxrwxrwx root root 422.html
f: 500.html
-rwxrwxrwx root root 500.html
f: favicon.ico
-rwxrwxrwx root root favicon.ico
f: robots.txt
-rwxrwxrwx root root robots.txt

我不认为这是一个许可问题。我已经运行rake db:migrate来创建数据库,但它确实有效。我很确定环境设置正确。我得到的只是一个文件列表(因为自动索引打开,否则我得到403)。但路由,应用默认索引/根也不起作用。我已经阅读了Passenger文档,我尝试使用文档和其他SO问题进行故障排除,但我似乎无法使其正常工作。

我没有忘记bundle install并安装了所有正确的软件包,我很确定(我忘记了吗?mysqlrvm及其安装的相关步骤rails nginxpassenger ......可能是另一个2-3)。

我知道我不应该启动rails server,因为它一次只允许1个连接。所以nginx应该做得恰到好处,对吧?或者这就是我应该用某些旗帜做的事情?

提前致谢。

8 个答案:

答案 0 :(得分:1)

好的大家好在乘客的作者IRC频道的帮助下,我能够解决问题。

我安装了两次乘客。

从我接下来的文章中没有详尽地讨论这个主题,我假设 Passenger Nginx 的可安装模块,这导致我安装<强大> Nginx ,apt-get乘客,通过宝石。

这是一种不必要的冗余并导致冲突。

在这些情况下,只使用 apt-get 这些宝石。

passenger-install-nginx-module不仅安装了一个模块,还从头开始编译Nginx,因为 Nginx不是一个可模糊的应用程序。它要么与模块一起编译,要么根本没有。

总结一下:

  1. 仅使用一种方法安装Nginx&amp;&amp;乘客。
  2. 确保配置指向正确的文件 我也遇到了红宝石的问题。确保它指向包装器,而不是单独的可执行文件:

    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;
    

答案 1 :(得分:0)

Suggestion- 尝试将您的应用程序移动到普通用户可访问的位置。例如主目录

答案 2 :(得分:0)

你是如何安装乘客的?使用RVM? RVMSUDO还是sudo?您可能不应该以root身份使用您的应用。因此,文件的权限不允许乘客使用rails应用程序。

答案 3 :(得分:0)

假设您的config.ru位于指定的passenger_app_root中,请尝试删除location / {...}指令,重新启动nginx,然后查看您的应用是否至少启动。我不是说这是修复,而是一个故障排除措施。

答案 4 :(得分:0)

我打算将此放在我的评论部分,但空间和格式有限,所以:

我也看到你两次指定passenger_enabled,这似乎是不必要的。我之前从未在location指令中看到过它,但这可能不是你的问题。

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

http {
...
    passenger_debug_log_file '/path/to/passenger_debug.log';
    passenger_log_level       5; # default
}

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

答案 5 :(得分:0)

你有

# nginx config
root /home/LucyRb/public;

# shell
/var/www/LucyRb/public

/ home / LucyRb中有正确的应用吗?如果是这样,/ var / www / LucyRb的相关性是什么?如果这是你的配置中的错误,那么它可能会导致一些麻烦!

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

  1. 卸载和/或关闭您当前安装的任何nginx。
  2. 进入你应用的根目录,
  3. 执行命令:passenger-install-nginx-module并让乘客在/opt下载,编译和安装nginx。
  4. 使用乘客脚本为/opt/nginx/conf/nginx.conf
  5. 提供的示例配置
  6. 要让服务器在启动时启动,只需将/opt/nginx/sbin/nginx一行添加到/etc/rc.local script
  7. 对于我在Ubuntu 10和12上运行RVM + Ruby 1.9,2.0和Rails 3和4,这个方法是可重复的,万无一失。