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

时间:2011-11-15 05:13:39

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

当我访问.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应用程序似乎没有启动的任何想法?

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:11)

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

答案 2 :(得分: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  

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

如上所述,这对我有用,虽然我不是专家,也许我正在玩错误的参数。