Rails 3.1,nginx,禁止使用目录索引

ale*_*lod 13 passenger nginx ruby-on-rails-3

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

[error] 5384#0: *1 directory index of "/u/apps/<app-name>/current/public/" is forbidden
Run Code Online (Sandbox Code Playgroud)

我在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/;
}
Run Code Online (Sandbox Code Playgroud)

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

任何想法为什么rails应用程序似乎没有启动?

ale*_*lod 29

好吧,我回答了我自己的问题.我的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;
Run Code Online (Sandbox Code Playgroud)


Jie*_*rat 11

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

  • 我没有位置块,所以我添加了一个`location/{passenger_enabled on; }` (2认同)

Mat*_*ers 7

如果您使用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  
Run Code Online (Sandbox Code Playgroud)

官方公告github门票的更多细节.

我知道OP的问题是关于Rails 3.1的,但是想在这里包含它,因为输出是相同的,搜索引导我到这篇文章.

  • 花了3个小时寻找这个!许多荣誉。谢谢!! (2认同)