【问题标题】:Rails 3.1, nginx, Passenger directory index forbiddenRails 3.1,nginx,禁止乘客目录索引
【发布时间】:2011-11-15 05:13:39
【问题描述】:

当我访问 .com 时,我在 nginx 中收到以下错误(带有 403):

[error] 5384#0: *1 directory index of "/u/apps/<app-name>/current/public/" is forbidden

我在 Ubuntu 10.04 上,我一辈子都无法让 nginx、Passenger、Rails 3.1 和 Capistrano 玩得很好。

我正在使用 Capistrano 部署到 /u。 /u 中的所有内容都是 755,归应用用户所有。

/u/apps//current/public/ 拥有我所有的资产、网站图标以及您期望的所有其他内容。

当我将autoindex on 添加到 nginx.conf 时,我得到了 public/ 目录的列表,这让我相信我没有权限问题。

我的 nginx.conf 文件是默认期望的:

server {
    listen 80;
    server_name <app-name>.com;
    passenger_enabled on;
    root /u/apps/<app-name>/current/public/;
}

我的 Capistrano deploy.rb 文件并没有什么异常。

知道为什么 rails 应用程序似乎没有启动吗?

【问题讨论】:

    标签: ruby-on-rails-3 nginx passenger


    【解决方案1】:

    好的,我回答了我自己的问题。我的 nginx.conf 文件中缺少passenger_ruby 和passenger_root 配置。请注意,如果您使用的是 RVM,passenger_ruby 路径必须是包装器。

    passenger_root /usr/local/rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.9;
    passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.2-p290/ruby;
    

    【讨论】:

    • 好吧,如果这解决了您的问题,请继续接受您自己的答案。
    • 知道为什么它必须是包装器吗?我真的不知道 RVM 中有哪些不同的目录,但为什么不 bin 呢?
    • 如果由于任何原因无法加载乘客,就会发生这种情况。如果路径错误,您会看到相同的结果。
    【解决方案2】:

    如果您的nginx.conf 中已经有passenger_rootpassenger_ruby,但出现此错误,则必须有一些位置块。然后你必须指定 passenger_enabled on; 在每个位置块内。

    【讨论】:

    • 这对我来说是个窍门,我忘了把passenger_enabled 添加到站点配置中。
    • 对我来说不是这样。我没有位置块,但我仍然收到此错误。
    • 我也没有位置块,所以我添加了location / { passenger_enabled on; }
    【解决方案3】:

    如果您在使用 Passenger 5+ 时遇到此问题,并且您的 Rails 应用程序是 2.3.x 应用程序,您现在需要向您的应用程序添加一个 config.ru 文件:

    # Require your environment file to bootstrap Rails
    require ::File.dirname(__FILE__) + '/config/environment'
    
    # Serve static assets from RAILS_ROOT/public directory
    # use Rails::Rack::Static
    # Dispatch the request
    run ActionController::Dispatcher.new  
    

    更多详情请见official announcementgithub ticket

    我知道 OP 的问题是关于 Rails 3.1 的,但我想在此处包含此问题,因为输出是相同的,并且搜索将我带到了这篇文章。

    【讨论】:

    • 花了 3 个小时寻找这个!很多赞。谢谢!!
    【解决方案4】:

    很抱歉回答一个老问题,但它似乎相关(至少对我而言 ;-)) 由于这篇文章,我遇到了类似的问题并设法解决了它,但方式不同。 或者,您可以设置 /etc/nginx/nginx.conf 以使用:

    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
    passenger_ruby /usr/bin/ruby;
    

    然后通过运行确保 locations.ini 是最新的:

    passenger-config --make-locations-ini
    

    如前所述,这对我有用,虽然我不是专家,但也许我使用了错误的参数。

    【讨论】:

      猜你喜欢
      • 2013-09-03
      • 2014-01-13
      • 1970-01-01
      • 2011-05-31
      • 2018-10-16
      • 2016-06-19
      • 2011-09-09
      • 2013-11-20
      • 1970-01-01
      相关资源
      最近更新 更多