【问题标题】:Rails 4.1.6 APP: NGINX: directory index of "/var/www/your_own_store/current/public/" is forbiddenRails 4.1.6 APP:NGINX:“/var/www/your_own_store/current/public/”的目录索引被禁止
【发布时间】:2014-09-30 13:51:38
【问题描述】:

我正在尝试在 linode VPS 上部署 rails 应用程序。出于部署目的,我创建了deployer 用户。

我已经使用 rvm 安装了 ruby​​/rails/passenger。

我的 /opt/nginx/conf/nginx.conf 如下:

http {
passenger_root /home/deployer/.rvm/gems/ruby-2.1.3/gems/passenger-4.0.52;
passenger_ruby /home/deployer/.rvm/rubies/ruby-2.1.3/bin/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;
server {
    listen       80;
    server_name  myserver;
    passenger_enabled on;
    rails_env production;
    root /var/www/your_own_store/current/public;
    #charset koi8-r;

    #access_log  logs/host.access.log  main;

nginx 重启后,我得到 403 页面。而error.log如下:

2014/09/30 13:33:24 [error] 27388#0: *27 directory index of "/var/www/your_own_store/current/public/" is forbidden, client: 1.39.62.158, server: myserver, request: "GET / HTTP/1.1", host: "myhost"

调试了将近2天,感觉问题可能是这样的:

连接服务器后,除非我这样做

$ source ~/.bash_profile

我看到我的 rails 版本是 1.9.3。和乘客安装在不同的地方如下图:

root@localhost:/opt/nginx/logs# passenger-config --root
/var/lib/gems/1.9.1/gems/passenger-4.0.52
root@localhost:/opt/nginx/logs# su deployer
deployer@localhost:/opt/nginx/logs$ passenger-config --root
/var/lib/gems/1.9.1/gems/passenger-4.0.52
deployer@localhost:/opt/nginx/logs$ source ~/.bashrc
deployer@localhost:/opt/nginx/logs$ passenger-config --root
/var/lib/gems/1.9.1/gems/passenger-4.0.52
deployer@localhost:/opt/nginx/logs$ source ~/.bash_profile
deployer@localhost:/opt/nginx/logs$ passenger-config --root
/home/deployer/.rvm/gems/ruby-2.1.3/gems/passenger-4.0.52

root@localhost:/opt/nginx/conf# ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]
root@localhost:/opt/nginx/conf# su deployer
deployer@localhost:/opt/nginx/conf$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]
deployer@localhost:/opt/nginx/conf$ source ~/.bash_profile
deployer@localhost:/opt/nginx/conf$ ruby -v
ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux]

我不确定这是否是问题的根本原因。如果是这样,如何解决?

早些时候我将所有东西都安装为root,它的工作原理非常有魅力。

谁能帮我解决这个问题?

谢谢

更新:我可以找到默认 ruby​​ 设置的解决方案。 原因是,在以用户身份登录时,系统源 .bash_profile,而如果我执行“su”,则它的非登录 shell。所以它只是来源 .bashrc 而不是 .bash_profile。

所以在 .bashrc 中添加以下行后,我可以在 'su' 之后找到正确的 ruby​​ 版本 [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # 将 RVM 加载到 shell 会话中作为函数

Here 是我在 unix.stackexchange 上找到的解释的参考。

【问题讨论】:

    标签: ruby-on-rails nginx passenger


    【解决方案1】:

    显然,我通过引用网络上提供的多个文档搞砸了一些事情。我只是重建了服务器并遵循了正确的步骤(我将很快在博客中发布所有步骤)。一切都像魅力一样工作:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      相关资源
      最近更新 更多