1

我有一个简单的 Ruby on Rails 应用程序,它通过 localhost 测试工作(都使用 sqlite 或 ruby​​ mysql2 gem)。我有一个网络服务器准备好在线上传我的应用程序。我知道我需要创建一个新的 mysql 数据库,这没问题,并且显然在 database.yml 中添加了连接信息,但是如何正确地将整个内容(应用程序根目录)上传到我网站的公共目录?

4

3 回答 3

5

Rails 本身包含一些链接,可帮助您开始部署。不久前我在你的船上,半小时内我就开始使用Passenger和Apache(尽管我确实有一些轻微的Apache经验)。

开始只是为了向自己证明你可以做到

这并不是一个好主意,但最简单的“部署”方法如下(假设您已经将应用程序拉入部署环境,创建数据库并运行以及任何特定于rake db:migrate应用程序的步骤,例如bundle install导轨 3):

  1. rails server -p 80在 Rails 3 上(./script/server -p 80在 Rails 2 上)。
  2. 没有第 2 步。

这必须在您拥有管理权限且端口 80 尚未被其他应用程序监听的机器上运行。这在许多方面都不是最理想的,其中最明显的是它不允许虚拟主机(即,它不会与从该服务器运行的其他“网站”合作),但这是一个很好的婴儿步骤脚进。

转到机器的 FQDN,或者实际上是任何解析为机器 IP 地址的主机名(通过主机文件或 A 记录),您将看到您的应用程序。

现在做正确

您将需要执行以下操作以使您的应用程序“加速”:

  • 将其部署在 Apache 等网络服务器应用程序后面的虚拟主机后面
  • 使用面向生产的部署设置(WEBrick 的单线程等因素使其不适合生产)
  • 实际使用“生产”rails 环境

我将推荐一个非常非常典型的 Apache/Passenger 部署环境。原因是(至少在我看来)这个特定的堆栈是 Internet 上最彻底的支持,所以如果你需要获得帮助,你将有最轻松的时间。

1.设置阿帕奇

我不想听起来像一个工具,但设置 Apache(如果尚未在您的部署环境中设置)留给读者作为练习。它在不同平台上的差异也很大,以至于我无法编写一个包罗万象的指南。粗略地说,使用您的发行版的包管理器(对于 Ubuntu,这是apt-get)来连接它。

2.设置乘客

乘客安装更加容易。您只需运行一个命令,他们的指南就会引导您完成所有步骤。此时,在您的 Rails 应用程序根目录中,您将能够运行passenger start而不是rails s让Passenger 担任WEBrick 曾经担任的角色。

3. 用 Apache 连接乘客

乘客指南相当详尽的文件,一步一步地,如何设置它。Apache 的 VirtualHost 条目中的ServerName属性应设置为您的主机名。Passenger 将从您提供给 Apache 的公共目录中“找到” Rails 应用程序,当您重新启动 Apache 时,服务器第一次收到对页面的请求时,Passenger 将连接您的 Rails 应用程序并开始提供文件。

在编写本指南时,我没有执行这些步骤,因此我不确定自动完成的程度,但请确保通过以下方式启用该站点a2ensite(如果您将此VirtualHost节点放入目录),并且该sites-available乘客通过a2enmod.

  1. 确保您的生产环境已准备就绪 这可能是您第一次使用生产环境。大多数 rake 任务不会自动作用于生产环境,但您可以方便地通过RAILS_ENV=production在任何 rake 任务中包含内联来强制它们执行。您很可能会运行的是rake db:migrate RAILS_ENV=production. Rails 3 中的捆绑器独立于环境工作。

5. 去

重启阿帕奇。如何做到这一点的细节会因发行版而异,所以你必须查一下。对于 Ubuntu,apache2ctl restart为我做。

访问您在 中定义的主机名ServerName,您应该会看到您的应用程序启动并运行。

于 2011-01-17T02:34:05.947 回答
1

我听说像 capistrano 这样的宝石可以帮助解决这个问题。

https://github.com/capistrano/capistrano

于 2011-01-17T02:08:19.670 回答
0

Heroku 是一个很好的(免费)选项:http: //docs.heroku.com/quickstart

此外,部署到 Heroku 非常简单!

于 2011-01-17T02:13:41.063 回答