【问题标题】:Problem deploying Rails with Passenger to Mac OS X Leopard Server将带有乘客的 Rails 部署到 Mac OS X Leopard 服务器时出现问题
【发布时间】:2010-06-12 05:54:20
【问题描述】:

我正在转动我的轮子... Apache 正在正常工作并提供静态 html、png 等。试图让Passenger 为www.mydomain.com/rails/ 之外的rails 应用程序提供服务

当我尝试点击我的应用程序时:www.mydomain.com/rails/myapp/railsclassname 我只收到一个 Apache 403 错误。 myapp 的生产日志中没有任何内容。

Apache2 access.log:

"GET /rails/ HTTP/1.1" 403 1085

Apache2 错误日志:

[Fri Jun 11 22:44:01 2010] [error] [client 10.0.1.41] File does not exist: /Library/WebServer/wwwroot/rails/railsclassname

我什至尝试过 www.mydomain.com/myapp/classname

显然,Passenger 不会将在我的子文件夹 rails/ 中发出的请求路由到我的 rails 应用程序。不知道我在哪里搞砸了。最明显的是“Passenger doesn't seem to be running”...我遵循的指令只是对sudo apachectl graceful说,我已经完成了(以及停止/启动) .新手,所以放轻松!

这里有一些可能有用的信息。很乐意根据需要提供更多...


根据some instruction @ Passenger site,我从/Library/WebServer/myapp/rails 创建了一个符号链接 -> /Library/WebServer/rails/myapp/public

myhost:myapp joe$ passenger-config --root
/Library/Ruby/Gems/1.8/gems/passenger-2.2.14
myhost:myapp joe$ passenger-status
ERROR: Phusion Passenger doesn't seem to be running.

apollo:myapp joe$ cat /etc/httpd/httpd.conf

...
<removed for brevity>
...
# Copied From Passenger Installer
   LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-2.2.14/ext/apache2/mod_passenger.so
   PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-2.2.14
   PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
# End Passenger Installer

  NameVirtualHost *

   <VirtualHost *:80>
      ServerName www.mydomain.com
      DocumentRoot /Library/WebServer/rails/myapp/public    # <-- be sure to point to 'public'!
      RackBaseURI /rails
      <Directory /Library/WebServer/rails/myapp/public>
         AllowOverride all              # <-- relax Apache security settings
         Options -MultiViews            # <-- MultiViews must be turned off
         order allow,deny
         Allow from all
      </Directory>
   </VirtualHost>

NameVirtualHost 上的最后一点是从我发现的一些在线材料中拼凑而成的……因为我一直在拼命地试图找到一些东西/任何可以显示乘客至少有脉搏的东西!?!

【问题讨论】:

    标签: ruby-on-rails apache macos passenger


    【解决方案1】:

    所以,你有

    www.mydomain.com
    www.mydomain.com/rails
    

    它们都指向不同的网站(我们称它们为 main 和 rails),每个网站的代码可能会保存在文件系统中,如下所示:

    /Library/WebServer/main/
    /Library/WebServer/rails/
    

    我们创建一个符号链接,从您的 rails 应用程序的公共文件夹到您的主应用程序中名为 rails 的文件夹:

    ln -s /Library/WebServer/rails/public /Library/WebServer/main/rails
    

    然后我们为主站点创建一个 VirtualHost(不是 rails 的,我假设主站点不是 rails)并将 rails 应用程序添加为子 URI,如下所示:

    <VirtualHost *:80>
      ServerName www.mydomain.com
      DocumentRoot /Library/WebServer/main
      <Directory /Library/WebServer/main>
        Allow from all
      </Directory>
    
      RackBaseURI /rails
      <Directory /Library/WebServer/main/rails>
        Options -MultiViews
      </Directory>
    </VirtualHost>
    

    (如果您已经为您的主网站设置了 VirtualHost,您可以添加 RackBaseURI 和前面的 Directory 声明来代替)。

    现在重启apache,你应该可以去:

    www.mydomain.com/rails
    

    并查看“欢迎使用 Rails”页面,或者:

    www.mydomain.com/rails/controllername
    

    希望对您有所帮助。

    【讨论】:

    • 谢谢!非常有帮助。它现在正在工作。有点儿。 www.mydomain.com/rails 有效,但 www.mydomain.com/rails/ 无效!同样www.mydomain.com/rails/controller/newwww.mydomain.com/rails/controller 都可以工作,但www.mydomain.com/rails/controller/1www.mydomain.com/rails/controller/show/1 不行?!?
    • 这是因为 /rails/ 由 Apache 的目录处理程序处理。您可以通过在 Apache 中禁用 mod_autoindex 来解决此问题。 RailsAllowModRewrite 应该默认关闭,这将消除问题,但某些配置会被覆盖。
    猜你喜欢
    • 2020-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2011-04-01
    • 2013-02-04
    相关资源
    最近更新 更多