【问题标题】:Ruby/Rails Apache2 & Passenger setup returning directory listingRuby/Rails Apache2 & Passenger 设置返回目录列表
【发布时间】:2012-10-26 07:08:36
【问题描述】:

首先,我有一个功能齐全的 Apache2 服务器(在 Ubuntu 12.04 VPS 上)和多个工作虚拟主机(但这是我第一次尝试部署 Rails 站点),这毫无价值。此外,我尝试启动的 Rails 站点在我的本地 WEBRick 服务器上功能齐全。

我参考了各种在线说明,以使 Apache、Ruby、Rails 和 Passenger 能够很好地协同工作,包括:

总结一下,到目前为止我已经:

  1. 已安装 Ruby(站点根目录中的ruby -v 返回 1.9.3)、RVM、Ruby Gems、Rails(应用文件夹中的rails -v 返回 3.2.8,我可以在应用文件夹中启动 rails server)和乘客(包括所有依赖项)
  2. 按照passenger-install-apache2-module 的指示,我在/etc/apache2/apache2.conf 的底部添加了以下几行:

    LoadModule passenger_module /var/lib/gems/1.8/gems/passenger 3.0.17/ext/apache2/mod_passenger.so
    PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.17
    PassengerRuby /usr/bin/ruby1.8
    
  3. 创建并启用(在/etc/apache2/sites-enabled/ 中列出)一个虚拟主机/etc/apache2/sites-available/foo.com,其中包含以下内容:

    <VirtualHost *:80>
      ServerName foo.com
      DocumentRoot /home/user/public/foo.com/public
      <Directory /home/user/public/foo.com/public>
        AllowOverride all
        Options -MultiViews
      </Directory>
    </VirtualHost>
    
  4. 已将我的 Rails 应用程序上传到 /home/user/public/foo.com/

  5. /home/user/public/foo.com/ 中做了一个bundle install

  6. 在我的本地 OSX 机器上,我已将 xxx.xxx.xxx.xxx foo.com [VPS IP] 添加到 /etc/hosts

  7. 重新启动 Apache

但是当我在浏览器中导航到 foo.com 时,我只看到了 /home/user/public/foo.com/public 的列表。此外,Apache error.log 中没有最近的条目。然而,每当我restart Apache 我得到:

 * Restarting web server apache2
[Fri Oct 26 00:04:12 2012] [warn] module passenger_module is already loaded, skipping
 ... waiting [Fri Oct 26 00:04:13 2012] [warn] module passenger_module is already loaded, skipping
   ...done.

我希望我忽略了一些非常愚蠢的事情。任何帮助弄清楚那是什么都会非常非常感谢。谢谢!

【问题讨论】:

    标签: ruby-on-rails passenger ubuntu-12.04 vps


    【解决方案1】:

    如果您使用的是 apache2.2,则不应在 apache2.conf 中包含以下内容

    LoadModule passenger_module /var/lib/gems/1.8/gems/passenger 3.0.17/ext/apache2/mod_passenger.so
    PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.17
    PassengerRuby /usr/bin/ruby1.8
    

    相反,您应该在 /etc/apache2/mods-available 上创建 2 个文件:

    passenger.load 与:

    LoadModule passenger_module /var/lib/gems/1.8/gems/passenger3.0.17/ext/apache2/mod_passenger.so
    

    passenger.conf 与:

    PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.17
    PassengerRuby /usr/bin/ruby1.8
    

    最后你只需要运行:

    a2enmod passenger
    

    它已经完成了。顺便说一句,当你让它工作时,你可能会考虑使用更新版本的 ruby​​(1.9.3... 左右)。最好的方法是使用RVM

    【讨论】:

    • 感谢您的回复。我不再在页面上看到目录列表(所以我接受了你的回答),而是看到了乘客错误页面。参数。
    • "没有要加载的文件 -- bundler/setup" 就在几分钟前,我创建了一个包含所有详细信息的问题:stackoverflow.com/questions/13092293/…
    • 我显然需要做的只是从 apache2.conf 中删除这 3 行,这也可能一文不值。乘客已启用。 passenger.load 已经存在并包含以下内容(我没有做任何更改):LoadModule passenger_module /usr/lib/apache2/modules/mod_passenger.sopassenger.conf 也存在并包含以下内容(同样,我没有做任何更改):&lt;IfModule mod_passenger.c&gt; PassengerRoot /usr PassengerRuby /usr/bin/ruby &lt;/IfModule&gt;
    • 谢谢你,它给了我一个新生。
    【解决方案2】:

    我试图使用乘客来运行 Rails 2.3。我几年前创建的应用程序需要迁移到新服务器。

    我添加了乘客,但我得到的只是一个目录列表。

    最后发现我没有config.ru 文件。 用这两行创建一个文件就足够了:

    require File.dirname(__FILE__) + '/config/environment' run ActionController::Dispatcher.new

    我花了大约 5 个小时才发现我错过了这两行。我希望处于类似情况的每个人都能在花费太多时间之前找到这个答案...... :-)

    【讨论】:

      【解决方案3】:

      有同样的问题,原来,在 /etc/apache2/mods-enabled/passanger.load 我安装了 apache2 的乘客。所以不想工作,把它改成 gems 安装的乘客.so

      LoadModule passenger_module /var/lib/gems/1.9.1/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-12
        • 1970-01-01
        • 2021-12-19
        • 2015-07-16
        • 2012-02-25
        • 2023-03-11
        • 1970-01-01
        • 2014-01-08
        相关资源
        最近更新 更多