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

Epi*_*pus 11 ruby apache ruby-on-rails passenger ruby-on-rails-3

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

到目前为止我做了什么:

  • 通过RVM和GEM安装Ruby/RubyGems/Rails(安装了Ruby 1.9.2和Rails 3.0.7)
  • 安装mysql和mysql2模块(后者无法正常工作)
  • 创建rails应用程序(博客应用程序作为教程指示)
  • sym链接/ home/me/www/blog/public/from/var/www/blog /
  • 通过rake创建DB
  • 在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):

未找到

在此服务器上找不到请求的URL /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/
Run Code Online (Sandbox Code Playgroud)

这是cgi上404最新的条目:

[Sat May 28 08:01:18 2011] [error] [client 192.168.1.141] File does not exist: /var/www/blog/dispatch.cgi
Run Code Online (Sandbox Code Playgroud)

我能错过什么?谢谢!


其他详细信息请求.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>
Run Code Online (Sandbox Code Playgroud)

另一个更新:我最终通过使用顶级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>
Run Code Online (Sandbox Code Playgroud)

Mar*_*lde 21

部署Ruby on Rails应用程序

假设您在/ webapps/mycook中有一个Ruby on Rails应用程序,并且您拥有域名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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

这里阅读整个文档