我有一个简单的 Ruby on Rails 应用程序,它通过 localhost 测试工作(都使用 sqlite 或 ruby mysql2 gem)。我有一个网络服务器准备好在线上传我的应用程序。我知道我需要创建一个新的 mysql 数据库,这没问题,并且显然在 database.yml 中添加了连接信息,但是如何正确地将整个内容(应用程序根目录)上传到我网站的公共目录?
3 回答
Rails 本身包含一些链接,可帮助您开始部署。不久前我在你的船上,半小时内我就开始使用Passenger和Apache(尽管我确实有一些轻微的Apache经验)。
开始只是为了向自己证明你可以做到
这并不是一个好主意,但最简单的“部署”方法如下(假设您已经将应用程序拉入部署环境,创建数据库并运行以及任何特定于rake db:migrate
应用程序的步骤,例如bundle install
导轨 3):
rails server -p 80
在 Rails 3 上(./script/server -p 80
在 Rails 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
.
- 确保您的生产环境已准备就绪 这可能是您第一次使用生产环境。大多数 rake 任务不会自动作用于生产环境,但您可以方便地通过
RAILS_ENV=production
在任何 rake 任务中包含内联来强制它们执行。您很可能会运行的是rake db:migrate RAILS_ENV=production
. Rails 3 中的捆绑器独立于环境工作。
5. 去
重启阿帕奇。如何做到这一点的细节会因发行版而异,所以你必须查一下。对于 Ubuntu,apache2ctl restart
为我做。
访问您在 中定义的主机名ServerName
,您应该会看到您的应用程序启动并运行。
我听说像 capistrano 这样的宝石可以帮助解决这个问题。
Heroku 是一个很好的(免费)选项:http: //docs.heroku.com/quickstart
此外,部署到 Heroku 非常简单!