【问题标题】:Rails Passenger problem with Apache2Apache2 的 Rails 乘客问题
【发布时间】:2011-09-13 02:21:10
【问题描述】:

我正在尝试使用 apache2 和 mod_rails(Phusion Passenger)在 ubuntu10.10 上的 rails 服务器上设置一个 ruby​​。

我已经安装了 ruby​​ 1.9.2-p0 和 rails 3.0.8 并安装了带有 Passenger-install-apache2-module 和乘客 gem (v3.0.7) 的 Passenger。

然后它告诉我在我的 Apache 配置文件中添加 3 行。所以我将这些行添加到'/etc/apache2/apache2.conf':

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/gems/1.9.1/gems/passenger-3.0.7
PassengerRuby /usr/local/bin/ruby

我编辑了我的“/etc/apache2/httpd.conf”并添加了:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName 192.168.0.2
DocumentRoot /var/www/webop/public

<Directory /var/www/webop/public>
Allow from all
Options -MultiViews
</Directory>
</VirtualHost>

我还发现/usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/里面的文件mod_passenger.so其实是不存在的,它的名字是mod_passenger 。C。但我没有从中得到任何错误。

服务器应该只能通过 LAN 访问。当我访问服务器时,我看到了我的应用程序公用文件夹中的所有文件和目录,但应用程序本身没有启动。

当我重新启动 apache 时,它​​告诉我 mod_rails 已经加载,所以我猜乘客正在运行,但我不知道为什么它没有启动我的应用程序!

提前致谢!

【问题讨论】:

    标签: ruby-on-rails apache2 passenger ubuntu-10.10 mod-rails


    【解决方案1】:

    我认为他们希望您将这三行放在您的 httpd.conf 文件中,而不是放在您的 apache2.conf 中。至少我一直都是这样做的。

    【讨论】:

    • 我尝试了两种方式,都没有工作。 apache2.conf 不包括 httpd.conf 吗?无论如何感谢您的回答!
    • 是的,你可能是对的。这是在黑暗中拍摄的。关于您所看到的行为的更多信息?当您尝试在浏览器中导航到 URL 时会发生什么?您在 apache 或您的 rails 应用程序日志中看到任何内容吗?
    • 我终于弄清楚了问题所在,乘客现在运行正常。感谢您的帮助!
    • 我什至没有在我的 apache2 文件夹中启用 mods!可以做什么?
    【解决方案2】:

    我终于弄清楚了问题所在:我搞砸了我的 ruby​​ 安装。

    在 /usr/local/ 我安装了 ruby​​1.9.2-p0(这是我想使用的版本),但在 /usr/ 我安装了 ruby​​1.8.7。

    Passenger 对使用哪个 ruby​​ 版本感到困惑,所以我将 apache2/mods-enabled/passenger.load 和 .config 中的 LoadModule、PassengerRoot 和 PassengerRuby 路径更改为正确的路径,它终于奏效了!这两个文件都是自动创建的,这也导致了重新定义的问题:在 apache 启动时出现警告“mod_passenger 已加载”。所以我删除了

    LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
    PassengerRoot /usr/local/lib/gems/1.9.1/gems/passenger-3.0.7
    PassengerRuby /usr/local/bin/ruby
    

    从 apache 配置中,警告消失了!

    也许有一天这会帮助别人!

    【讨论】:

    • 我什至没有在我的 apache2 文件夹中启用 mods!可以做什么?
    • @vishB 有更多详细信息吗?你有没有遵循任何教程?你已经尝试了什么?
    【解决方案3】:

    mod_passenger.so 不存在的原因是因为您没有安装 Apache 模块。执行:

    passenger-install-apache2-module
    

    这将在您的 gem 目录中创建 mod_passenger.so 文件,并为您提供三行复制到您的 apache2.conf 文件中。

    乘客模块已安装在您当前的 gemset 中,因此您不应在项目之间遇到任何冲突。您可以使用任何兼容版本的 Ruby,以及您喜欢的任何 gemset,通过 RVM,也可能通过 RBENV。这为从一个版本的 Ruby 升级到下一个版本提供了一条非常简单的路径。

    【讨论】:

      【解决方案4】:

      我今天遇到了一个更清洁的解决方案。这可能对未来的用户有所帮助。命令 -

      passenger-install-apache2-module
      

      告诉我将这三行放在 apache 配置文件中。

      LoadModule passenger_module /home/anwar/.rvm/gems/ruby-2.2.0/gems/passenger-4.0.59/buildout/apache2/mod_passenger.so
         <IfModule mod_passenger.c>
           PassengerRoot /home/anwar/.rvm/gems/ruby-2.2.0/gems/passenger-4.0.59
           PassengerDefaultRuby /home/anwar/.rvm/gems/ruby-2.2.0/wrappers/ruby
         </IfModule>
      

      但是,那个配置文件在哪里?答案是配置文件被分成许多部分,它们位于/etc/apache2/mods-available

      所以你应该做三件事——

      1. /etc/apache2/mods-available 文件夹中创建一个以.load 结尾的文件。我用passenger.load

      2. 在该文件中粘贴三行并保存文件。

      3. 现在在终端使用sudo a2enmod &lt;module-conf-filename&gt; 来启用模块。就我而言,该文件是passenger.load。所以,我用了

        sudo a2enmod passenger
        

      现在,重新启动服务器并使用命令apache2ctl -M 发现passenger 模块已启用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-23
        • 2016-06-04
        • 1970-01-01
        • 2016-02-06
        • 1970-01-01
        • 2013-02-11
        • 1970-01-01
        相关资源
        最近更新 更多