【问题标题】:Rails app not working with Apache + PassengerRails 应用程序不适用于 Apache + Passenger
【发布时间】:2013-02-06 12:33:53
【问题描述】:

我正在尝试在带有 Parallels Plesk Panel 11(64 位)的 CentOS 6 新虚拟机上托管 rails2 应用程序。 我已经使用here给出的步骤成功安装了 RVM、ruby、rails 和 passanger

我已正确执行所有步骤。 我已经安装了 ruby 1.8.7 和 rails 2.0.2

现在问题是,我可以在新服务器的 3000 端口上使用 Webrick 服务器运行应用程序。那里一切正常。但是当我想用 apache 运行它时,它并没有运行。当我点击 url 它返回页面

找不到

在此服务器上找不到请求的 URL /account/login。阿帕奇 服务器位于 www.mem.com 端口 80

这是我的 passanger.conf 文件:

/etc/httpd/conf.d/passenger.conf

    LoadModule passenger_module /usr/local/rvm/gems/ruby-1.8.7-p371/gems/passenger-3.0.19/ext/apache2/mod_passenger.so
   PassengerRoot /usr/local/rvm/gems/ruby-1.8.7-p371/gems/passenger-3.0.19
   PassengerRuby /usr/local/rvm/wrappers/ruby-1.8.7-p371/ruby

这是我的虚拟主机代码:

/etc/httpd/sites-available/mem.conf

    <VirtualHost *:80>
 ServerAdmin youremail@example.com
 DocumentRoot /var/www/mem/public
 ServerName www.mem.com
 ErrorLog /var/log/httpd/mem/error.log
 CustomLog /var/log/httpd/mem/access.log common
</VirtualHost>

任何建议将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby apache passenger


    【解决方案1】:

    问题已解决。网络托管公司已经使用不同的文档根创建了一个虚拟主机。我将我的应用程序目录移动到该路径并启动了应用程序。谢谢大家的建议。

    【讨论】:

      【解决方案2】:

      如果您设法将DocumentRoot 设置为错误的或不存在的目录,您也可能会看到这种情况。如果您无法弄清楚这一点,请仔细检查它是否存在。

      【讨论】:

        【解决方案3】:

        尝试在您的 VirtualHost 中添加此目录块

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

        【讨论】:

        • 感谢保罗的建议。我添加了目录块,但仍然无法正常工作。
        • 对您的操作系统不完全熟悉...您确定启用了虚拟主机吗?即您的主要 Apache 配置是否包含 /etc/httpd/sites-available 目录中的所有内容?或者您是否需要从 /etc/httpd/sites-enabled 创建指向它的符号链接 - 在 Ubuntu 上,有一个名为 a2ensite 的实用程序可以为您创建链接。
        • 在我的 apache conf 文件中,我只是在底部添加了以下语句“Include sites-enabled/*.conf”,没有任何其他更改。还通过以下命令创建了一个链接:“sudo ln -s /etc/httpd/sites-available/mem.conf /etc/httpd/sites-enabled/mem.conf”
        • 听起来不错,您确定正在加载模块吗?我猜你正在加载 /etc/httpd/conf.d/ 中的所有内容
        • 对不起,如何验证模块是否正在加载?
        【解决方案4】:

        我正在运行带有 Apache 和乘客模块的 CentOS 6 机器。我的站点配置位于/etc/httpd/sites-enabled/ 文件夹中。这是我的conf:

        # /etc/httpd/sites-enabled/hello-world.conf
        <VirtualHost *:80>
            ServerName hello-world.localhost
            DocumentRoot /var/www/hello/public
            <Directory /var/www/hello/public>
                Allow from all
                Options -MultiViews
            </Directory>
        </VirtualHost>
        

        永远记得重启apache:

        $ sudo apachectl restart
        

        希望这对您有所帮助。祝你好运。

        【讨论】:

        • 嗨 Moz,我做到了,但仍然无法正常工作我在 /var/log/httpd/error_log [Thu Feb 07 05:20:22 2013] [error] [client 157.55. 35.37] 文件不存在:/var/www/vhosts/default/htdocs/account 我不明白为什么 apache 在 /var/www/vhosts/default/htdocs/ 中查找文件而不是文档根路径 /var/www/mem你有什么主意吗?如果您需要任何其他详细信息,请告诉我谢谢!
        • 看起来您的基于名称的虚拟主机不工作,这应该输出您的虚拟主机设置,apache2 -t -D DUMP_VHOSTS - 有帮助吗?
        • 现在我可以使用 apache 启动应用程序了。但问题是,它没有在默认的 80 端口上运行。它在除 80 之外的所有有效端口上运行。我尝试在“/etc/httpd/sites-enabled/mem.conf”中将端口设置为 80,但它仍然给我与上述相同的错误。现在我的应用程序在端口 3000 上运行。为此,我必须在域名后面写下这个端口号。所以我的 URL 变成了 www.domainname:3000.com。我想在端口 80 上运行它。原因是什么?为什么它不在 80 端口上运行?
        【解决方案5】:

        我自己也遇到了同样的问题,尽管在 rhel 6.2(64 位)和 ruby​​-1.8.7 上使用了带有 https 的 rails3 应用程序。我通过在 /etc/httpd/conf.d/myapp.conf 的末尾添加以下行(在“VirtualHost”部分之后)解决了我的问题:

            PassengerPreStart https://<url-to-my-rails-app>
        

        一旦 apache 重新启动,我的应用程序就会正常显示。

        您可以从 apache 的乘客用户指南中找到更多信息:http://www.modrails.com/documentation/Users%20guide%20Apache.html#User_switching

        【讨论】:

          【解决方案6】:

          禁用 selinux。

          答案必须至少为 30 个字符。

          【讨论】:

          • 如果您可以扩展如何做到这一点,它将使这个答案更有用 - 并且超过 30 个字符的限制! =)
          • 我同意.. 为什么我们需要禁用 selinux?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-04-22
          • 2015-06-19
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 2013-01-28
          • 1970-01-01
          相关资源
          最近更新 更多