0

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

我的问题是:

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

背景(我建议你阅读):

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

在过去的 3 天里,我一直在尝试在我的 Macbook Pro 上设置一个开发环境,该环境不会被 Apple 对 Apache 安装的可笑限制所破坏。我安装了一个自定义的 Apache 安装(从 bitnami 使用他们的 ruby​​ 堆栈,因为我拒绝使用 Server.app),这样我就可以运行 Apache 并将 PHP 之类的东西轻松升级到 5.5,而且效果很好。

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

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

我按照他们的说明安装了Passenger,并为Bitnami 乘客安装做了一些修改,而不是Mac OS X 上的默认Apache——它正在工作。当我启动 apache 并运行时:passenger-memory-stats我从安装指南中得到预期的结果,这告诉我乘客正在运行。

但是,当我尝试部署一个简单的 hello world Rails 应用程序时,我会收到大量“我们很抱歉……”或者根本没有结果,只是一个空白页面。

我相当确定我的开发环境是正确的,除了最后一点,一切正常。我可以想象在 pow.cx 服务器上进行的开发,一旦部署准备就绪,您只需复制 Rails 应用程序并配置 Apache 的 VHOST 以指向您准备好部署的应用程序,而让 Passenger 处理其余部分,对吗?

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

gem 'pg'的 Gemfile 中有。

我已经阅读并尝试了以下 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>

主机文件:

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: 
4

2 回答 2

1

您的问题的答案摘要

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

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

    在开发中使用Passenger 非常容易。使用它的 Standalone mode,并运行passenger start而不是rails server.

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

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

阿帕奇与 Nginx

你会发现很多人推荐 Nginx(例如 Sergio 就这样做了)。我支持该建议。Nginx 比 Apache 更快,可以更好地处理慢速客户端,并且通常更易于使用。

乘客与 Nginx 配合得很好。它具有与 Apache 模式一样简单的 Nginx 集成模式。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 乘客错误消息。
    • Rails 应用程序写入 STDERR 的所有内容。这通常包括 Rails 在启动期间遇到的错误(但不是它在处理请求时遇到的错误)。
  • Rails 开发日志(或生产日志,如果您在生产环境中运行),log/development.log(或log/production.log)。在请求处理期间发生错误时,通常会在此处记录。该文件不包含Rails 在启动期间遇到的错误。

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

该提示也可以在Phusion 乘客手册的故障排除部分中找到。

卡皮斯特拉诺

塞尔吉奥推荐卡皮斯特拉诺。我支持该建议。您应该记住 Capistrano是对乘客的补充。它不会取代乘客。Capistrano 是一个用于自动化任务的工具。您当前是否创建应用程序的 tarball 并将其 scp 到您的服务器,然后在那里解压?好吧,Capistrano 会为您自动完成这类事情。

有关堆栈的所有不同部分(Apache、Passenger、Capistrano、HAProxy、Chef 等)如何组合在一起的更多信息,请查看Phusion Passenger 文档页面上的“大图”部分。

推荐摘要

  • passenger start在开发中使用。这是迄今为止最容易上手的。您不必编辑任何配置文件,它立即生效。
  • 在生产中使用 Phusion Passenger 的 Nginx。
于 2013-11-06T11:23:53.713 回答
1

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

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

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

还,

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

于 2013-11-06T09:29:08.367 回答