OS X:开发与发展使用Apache和Passenger进行RoR的生产部署

时间:2013-11-06 09:20:15

标签: ruby-on-rails apache deployment passenger development-environment

由于接下来的几天尝试为Rails,Apache和Passenger设置开发环境,我的头脑即将从乱糟糟的混乱中爆炸。

我的问题是:

  1. 您是否需要乘客参与开发环境?我可以用pow.cx开发吗? - 我99.99%肯定答案是否定的(你不使用乘客进行开发),但我需要确认,因为我现在非常困惑。
  2. 当我部署时,我只使用Passenger,对吗?即在部署之前,我从未接触过乘客。
  3. 我的开发环境是否正确?
  4. 生产部署只是在Passenger和Apache VHOST的影响下移动rails应用程序?
  5. 背景(我建议你阅读):

    似乎网络上的所有信息都关心为已经知道自己在做什么的人解释事情,而不是详细解释事情是如何运作的,这只是一系列的安装步骤,这让我非常困惑事物的作用,以及如何正确设置开发环境和部署RoR应用程序 - 所以请忍受这个长期的问题。

    在过去的3天里,我一直在尝试在我的Macbook Pro上设置一个开发环境,而这个环境并没有被Apple对Apache安装的严格限制所破坏。我安装了一个自定义Apache安装(来自bitnami使用他们的ruby堆栈,因为我拒绝使用Server.app)这样我就可以运行Apache并轻松地将PHP升级到5.5,这样就可以了。

    我正试图进入RoR,但到目前为止一直是一场斗争,我准备好放弃。

    我知道您需要Apache来提供Rails应用程序,以便服务器可以同时处理请求而不是一次处理请求,并且为此存在各种接口,如Thin或其他;强烈建议乘客。

    我按照他们的指示安装了Passenger并为Bitnami乘客安装编译了一些hackery,而不是Mac OS X上的默认Apache - 它正在运行。当我启动apache并运行时:passenger-memory-stats我会从安装指南中获得预期的结果,这样就可以告诉我乘客正在运行。

    然而,当我尝试部署一个简单的hello world Rails应用程序时,我得到了一大堆“我们很抱歉......”或者根本没有结果只是一个空白页面。

    我很确定我的开发环境是正确的,除最后一点外,一切正常。我可以想象在pow.cx服务器上进行开发,一旦部署就绪,你只需复制Rails应用程序并配置Apache的VHOST指向你可以部署的应用程序,而Passenger处理剩下的应用程序,这是正确的吗?

    我通过Postgress.app使用PostgresSQL,服务器工作正常,我可以连接到它。

    我的Gemfile中有gem 'pg'

    我已经阅读过,并尝试了以下SO问题中的每一个可想到的解决方案,但我要么得到没有结果,要么是空的日志......至少可以说是真气:

    所以尽管如此,我正在尝试使用以下内容部署这个hello world应用程序(适用于标准rails服务器):

    通过以下方式调用应用程序:

    http://dmarket.local:8081/
    

    虚拟主机:

    <VirtualHost *:8081>
    
        PassengerEnabled on
    
        RailsEnv production
        ErrorLog /Applications/rubystack/apache2/htdocs/helloworld/project_error.log
        CustomLog /Applications/rubystack/apache2/htdocs/helloworld/project_error.log combined
    
        ServerName dmarket.local:8081
        ServerAlias www.dmarket.local:8081
        DocumentRoot "/Applications/rubystack/apache2/htdocs/helloworld/public"
    
        PassengerPreStart http://dmarket.local:8081
    
        <Directory "/Applications/rubystack/apache2/htdocs/helloworld/public">
    
            Allow from all
            Options -MultiViews
    
        </Directory>
    
    </VirtualHost>
    

    HOSTS FILE:

    127.0.0.1   dmarket.local
    127.0.0.1   www.dmarket.local
    

    DATABASE.YML(开发,测试和生产相同):

      adapter: postgresql
      encoding: unicode
      host: 127.0.0.1
      port: 5432
      database: tsujp
      pool: 5
      username: tsujp
      password: 
    

2 个答案:

答案 0 :(得分:1)

不需要开发中的乘客。事实上,在开发模式中,您甚至不需要apache。您可以使用内置的Webrick服务器($ rails server)来运行您的应用。是的。 Pow是一个很好的工具,我一直都在使用它。

在生产中,还有多种选择。其中一个是Apache + Passenger,是的。但是你需要把Nginx放在那些前面(因为Apache不能很好地处理慢速客户端)。如果你有nginx,那么你可以用其他东西替换apache + passenger。很长一段时间我一直在使用Unicorn(来自github的ruby web服务器)。现在我最喜欢的是Puma。它使用的资源比独角兽少,但对代码有更多要求(最好是线程安全的,因为puma是一个线程服务器)。

现在,对于开发 - 生产的差异:众所周知,开发应尽可能地与生产类似,因为它可以最大限度地降低部署时的风险。所以,我的建议是:到处使用独角兽(开发和制作)。只有在生产时才将nginx放在它前面。

此外,

实际执行部署,请查看Capistrano。它成为部署rails应用程序的行业标准(但它也可以部署PHP,静态文件和你有什么)。

答案 1 :(得分:1)

您的问题答案摘要

  • 您没有需要开发中的乘客。您可以使用Pow进行开发,并使用Passenger进行部署。

    但是,如果您愿意,可以在开发中使用Passenger。在开发中使用Passenger是个好主意,因为这样您的开发环境将更多地匹配您的生产环境,从而降低部署时遇到意外问题的风险。

    在开发中使用Passenger非常容易。 Use it's Standalone mode,然后运行passenger start而不是rails server

  • Pow严格来说只是一个开发服务器。作者建议不要在生产中使用它。
  • 部署时,请触摸Passenger。您不必在部署时间之前触摸Passenger,但可能
  • 生产部署确实在Passenger的影响下移动应用程序,并设置虚拟主机。您当然还需要安装gems(bundle install)来设置数据库(编辑config / database.yml),运行数据库迁移(bundle exec rake db:migrate)等。

我还发布了与您关联的帖子的更新,以便让碰巧通过搜索找到这些帖子的人的生活更轻松。

Apache vs Nginx

你会发现很多人推荐Nginx(例如Sergio刚刚做过)。我是第二个推荐。 Nginx比Apache更快,更好地处理慢客户端,通常更容易使用。

乘客与Nginx合作很好。 It has an Nginx integration mode就像Apache模式一样简单。 Sergio建议使用Nginx + Unicorn或Nginx + Puma,但Nginx + Passenger(取代Unicorn / Puma)更容易设置,性能更好,使用更少内存,效果更好,功能更多。 Nginx + Unicorn需要大量配置,使用init脚本进行流程管理等。

但这只是推荐。你不 使用Nginx。坚持使用Apache + Passenger很好。 Apache适用于大多数人。

关于您的乘客问题

  

然而,当我尝试部署一个简单的hello world Rails应用程序时,我得到了一大堆“我们很抱歉......”或者根本没有结果只是一个空白页面。

每当出现意外错误时,首先应该阅读日志文件。有两个对您很重要的日志文件:

  • Web服务器错误日志,通常为/var/log/apache/error.log。此日志文件包含:

    • Phusion Passenger错误消息。
    • Rails应用程序写入STDERR的所有内容。这通常包括Rails在启动期间遇到的错误(但不包括它在处理请求时遇到的错误)。
  • Rails开发日志(或生产日志,如果您正在生产中运行),log/development.log(或log/production.log)。在请求处理期间发生错误时,通常会在此处记录。此文件包含Rails在启动期间遇到的错误。

错误消息通常会告诉您问题是什么以及如何解决。

此提示也可以在the Phusion Passenger manual, Troubleshooting section.

中找到

Capistrano的

Sergio推荐Capistrano。我是第二个推荐。你应该记住Capistrano 补充乘客;它不会取代乘客。 Capistrano是一个自动执行任务的工具。您是否正在创建应用程序的tarball并将其scp到您的服务器,并将其解压缩到那里?好吧,Capistrano为你自动化这类事情。

有关堆栈的所有不同部分如何组合在一起的更多信息(Apache,Passenger,Capistrano,HAProxy,Chef等),请查看{{>大图“部分{{ 3}}

推荐摘要

  • 在开发中使用passenger start。这是迄今为止最容易上手的。您不必编辑任何配置文件,它可以立即生效。
  • 在制作中使用Phusion Passenger for Nginx。