Heroku 部署

Heroku提供了 PaaS 云端服务,让 Ruby 应用程式可以跑在上头(所以不只是 Rails,像是 Sinatra 也可以跑在上面),以及提供 PostgreSQL 这套关联式数据库和其他许多的外挂服务。它的底层硬件资源是采用了可扩展的 Amazon EC2,透过 Heroku 的 dynos (它的资源单位) 只要拉上拉下就可以增加服务器负载了,非常厉害,请看 Rapportive 的故事:

想要拥有一个可随时延展的架构(scalable architecture),你只要选对厂商(hosting provider)就可以做到。如果Rapportive一开始随便选了一个便宜的VPS,流量一冲进来的时候可能就会像全面启动电影中Cobb的混沌世界(Limbo)一样崩溃。Rapportive的服务是放在知名厂商Heroku上,对于突然湧进的流量只需要增加Dynos的数量(Heroku提供服务的基本单位),基本上你是不需要修改你的程式的;当然,程式的优化、调整可以在同样能耐的硬件等级上容纳更多人。

使用Heroku、不需要调整程式、只需要增加Dyno数量?真的有这么美好吗?事实上Rapportive就是这么办到的,在来自全世界的流量突然湧进时,Rahul Vohra手边没有电脑,于是他随即拿起iPhone并且利用Nezumi这个设计来管理Heroku的应用程式,将Rapportive的Dynos增加到20个,就这么简单,可能不到一分钟吧?!系统的能耐马上就提昇了。

不过,这么方便的工具也是有一些缺点。首先它的价格昂贵,当你的网站有稳定流量时会不划算,另外他的服务器位在美国或欧洲,从亚洲连过去比较慢。最后是有Vendor lock-in的风险。因此,通常我们只利用它的提供的免费方案,作为玩具专案的展示之用,

第一次设定 Heroku

  • 注册 Heroku 帐号
  • 下载及安装 toolbelt 工具
  • Heroku默认使用PostgreSQL数据库,所以我们也在本机安装PostgreSQL,请执行 brew install postgresql

第一次在 Heroku 开 App

前提:Heroku 使用Git进行布署,你的专案必须用Git做版本控制。

请在你的专案目录下执行 heroku create

更新你的Code

  • Gemfile 加上 pg gem 和 rails_12factor gem,如果你本来用 sqlite3 或 mysql2 gem,请移除或搬到只有 :development:test 模式才使用 。
  1. gem 'pg'
  2. gem 'rails_12factor', group: :production
  3. group :development, :test do
  4. gem 'sqlite3'
  5. # ....
  6. end
  • bundle
  • config/database.yml 的 production 改用 postgresql adapter:
  1. production:
  2. adapter: postgresql
  3. encoding: unicode
  • commit 你的修改

部署到 Heroku

  • 在你的专案目录下执行 git push heroku master 将程式推送到 heroku 去
  • 执行 heroku run rake db:migrate
  • 执行 heroku open 就会打开浏览器了

如何浏览 Logs?

heroku logs —tail

如何打开远端的 Rails console?

heroku run rails console

参考资料