使用乘客在Apache上设置Rails应用程序 - Rails似乎没有加载

时间:2011-05-28 14:21:45

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

我正在尝试通过跟随https://help.ubuntu.com/community/RubyOnRails等文档来在Ubuntu实例上设置Rails。我正在尝试从Rails入门页面设置应用程序:http://guides.rubyonrails.org/getting_started.html

到目前为止我做了什么:

  • 通过RVM和GEM安装Ruby / RubyGems / Rails(安装了Ruby 1.9.2和Rails 3.0.7)
  • 安装mysql和mysql2模块(后者无效)
  • 创建rails app(博客应用程序作为教程指示)
  • sym链接/ home / me / www / blog / public / from / var / www / blog /
  • 通过rake创建数据库
  • 在Apache中安装用于Rails执行的乘客模块
  • 运行passenger-install-apache2-module以配置Apache
  • 从public / rails app文件夹中删除public.html文件,以便我的控制器/视图可以触发
  • 配置虚拟主机的站点可用文件
  • Rails路由的配置

我认为这是最后两个让我失望的步骤,部分原因是由于对Apache和Rails不熟悉(我对两者都不熟悉)。

在我的虚拟主机文件中,我试图指向/ var / www / blog中的博客公共目录。对于我的Rails路由,我按照指示root :to => "home#index"

当我浏览到http:// url时,我通常会看到我的“Hello,Rails!” “入门指南”第4.3节中的页面,但我看到的只是Apache的目录列表。静态页面可以工作,但不能处理Rails。

此时我不清楚乘客模块是否正在做任何事情或在哪里寻找任何正在发生的事情的证据。我试过各种各样的事情,例如在http:/// blog上运行名为“blog”的不同虚拟主机上的Rails应用程序,路由工作(静态页面和所有),但没有上面的Rails。

更新:在玩了一些之后,我现在收到一条新的错误消息(404):

  

未找到

     

请求的网址/dispatch.cgi是   在此服务器上找不到。

我已经确定这个cgi 404是由我从上面指出的help.ubuntu.com页面的指导中添加到.htaccess中的重写规则引起的。看起来没有必要或适用于旧版本的Rails。在线查找帮助时指令的不一致性令人迷惑!删除文件会让我遇到上一个问题。

这是我认为与第一个错误相关的Apache日志中的条目。虽然我似乎不再遇到这个错误,但可能与我之前尝试的其他事情有关...

[Fri May 27 22:49:41 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9 with Suhosin-Patch Phusion_Passenger/3.0.7 configured -- resuming normal operations
[Fri May 27 22:51:18 2011] [error] [client 192.168.1.141] File does not exist: /var/www/blog/rails, referer: http://192.168.1.138/blog/

这是关于cgi的404最新条目:

[Sat May 28 08:01:18 2011] [error] [client 192.168.1.141] File does not exist: /var/www/blog/dispatch.cgi

我能错过什么?谢谢!


要求的其他详细信息。 Apache站点文件:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/blog/
    RailsEnv development

        # <Directory />
        #       Options FollowSymLinks
        #       AllowOverride None
        # </Directory>

        <Directory "/var/www/blog/">
        Options Indexes FollowSymLinks -MultiViews +ExecCGI
                AllowOverride All
                Order allow,deny
                allow from all
        # AddHandler cgi-script .cgi
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
    AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

另一个更新:最后,我通过使用顶级DocumentRoot(/ var / www)并使用RailsBaseURI将我的Rails应用程序基于此来实现。这将映射到Phusion Passenger说明的“部署到子URI”部分。它用作http:///博客,这不是我想要的,但它有点无关紧要,因为我使用它只是为了在虚拟中学习Rails。我需要继续努力让它在以后的某个时间再次作为顶级应用程序运行。这是我当前(最终)的VirtualHost文件供参考:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/
        RailsEnv development

        <Directory /var/www/>
          Options FollowSymLinks
          AllowOverride None
        </Directory>

    RailsBaseURI /blog
        <Directory /var/www/blog/>
                Options Indexes FollowSymLinks -MultiViews +ExecCGI
                AllowOverride All
                Order allow,deny
                allow from all
                # AddHandler cgi-script .cgi
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

3 个答案:

答案 0 :(得分:21)

  

部署Ruby on Rails应用程序

     

假设您有一个Ruby on Rails   应用程序/ webapps / mycook,和   您拥有域名www.mycook.com。您   可以部署您的应用程序   虚拟主机的根(即   申请将可从   根URL,http://www.mycook.com/),   或者在子URI中(即应用程序)   将可从子URL访问,   如   http://www.mycook.com/railsapplication)。

     

部署到虚拟主机的根目录

     

将虚拟主机条目添加到您的   Apache配置文件。确保   满足以下条件:

     
      
  • 虚拟主机的文档根目录必须   指向Ruby on Rails   应用程序的公用文件夹。
  •   
  • Apache每个目录的权限   必须允许访问此文件夹。
  •   
  • 必须为此禁用MultiView   文件夹中。
  •   
     

例如:

<VirtualHost *:80>
    ServerName www.mycook.com
    DocumentRoot /webapps/mycook/public
    <Directory /webapps/mycook/public>
        Allow from all
        Options -MultiViews
    </Directory>
</VirtualHost>
  

您可能还需要调整一下   文件/文件夹权限。确保   以下文件夹是   可读和可执行的Apache:

     
      
  • 此公用文件夹。
  •   
  • 应用程序的配置文件夹。
  •   
  • 所有父文件夹。也就是说,/ webapps / mycook和/ webapps也必须   可读并可由Apache执行。
  •   
     

然后重启Apache。应用程序   现已部署。

阅读整篇文档here

答案 1 :(得分:4)

仔细检查以确保乘客通过键入来加载您的应用程序     sudo乘客身份

如果未装载乘客,则会显示错误,如果没有,则会显示以下错误。请注意它显示已加载的应用程序或应用程序以及当前正常运行时间的部分:

----------- General information -----------
max      = 6
count    = 1
active   = 0
inactive = 1
Waiting on global queue: 0
----------- Application groups -----------
/home/rourkem/public_html/evecord.com/current:
  App root: /home/rourkem/public_html/evecord.com/current
  * PID: 18976   Sessions: 0    Processed: 5       Uptime: 23m 55s

答案 2 :(得分:0)

请务必从应用程序的index.html目录中删除文件public