How to Deploy Your Rails App onto Heroku 2018 Version

前言
阅读基础
详细步骤
进阶教程
完结


起个英文名字好装逼~
其实照着heroku官方的教程也可以
Getting Started on Heroku with Rails 5.x
仔细看这篇教程是2018年12月4日的
那时候我正好在尝试自杀式部署rails
直到昨天写出了 Ruby on Rails(RoR)自杀式部署第N天
现在总算自己也摸索出来了
于是拿个小本子记录下要点


你可能需要以下一些基础知识来继续阅读:
1. Rails入门,至少要能写出hello world
2. Heroku入门,至少要了解Rails相关的部分
3. 待定,看文章能写多长


下面开始详细的图文步骤



我们先看一下大背景
今年是2018年
现在是12月13日
Rails版本是5.2.2
这个教程的有效期也许不足半年
我们先rails new toutoutiao
新建一个偷头条的App



直接rails s启动开发环境



就能看到这么一个玩意儿
至此一切顺利
至少说明我们能在本地开发环境搭建一个Rails应用
继续修改修改
让他能展示一下经典的Hello World
由于Rails采用的也是MVC模式
我们于是先添加一个hello到application的controller里


class ApplicationController < ActionController::Base
	def hello
		render html: "不想长大"
	end
end


然后更改config下的routes文件
修改网站根目录重新指向到这个application的hello命令


Rails.application.routes.draw do
	root 'application#hello'
end


rails s一下就能看到如下的情况



然后问题来了
仔细查看了一下gemfile
发现默认用的数据库是sqlite3
然而heroku说好了不支持他的
SQLite on Heroku
要么你在新建app的时候指定rails new -d postgresql
要么就得把gemfile里的gem 'sqlite3'
换成gem 'pg'
然后再bundle install
最后还得更新config/database.yml里面的配置



rake db:create
rake db:migrate
因为我们最终是要部署到heroku的
最好把production的db也整一下
RAILS_ENV=production rake db:create
RAILS_ENV=production rake db:migrate



本地运行一下production环境
rails s -e production



一切正常
这下可以开始部署到heroku里去了
直接跳过注册账号的过程



新建一个叫toutoutiao的app



建好之后heroku很贴心的提供了傻瓜式操作教程



git push heroku master之后


remote: -----> Compressing...
remote:        Done: 48.1M
remote: -----> Launching...
remote:        Released v6
remote:        https://toutoutiao.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.


这个时候如果你heroku open想打开app会失望的
因为数据库什么的都还没准备好
heroku run rake db:migrate



好了
大功告成



至此算是可以告一段落
但是我们把app的名字取做toutoutiao
而不是hello world
是因为我们真的要尝试偷头条的新闻


等等
好像heroku免费版本限制挺多
不妨部署到亚马逊的ec2里
说干就干



先把代码上传到gitlab里
然后根据这个比较新的教程来
Deploy Ruby On Rails on Ubuntu 18.04 Bionic Beaver



额,yesterday once more…
再换
EC2 Exercise 1.6: Deploy a Rails App to an EC2 Instance Using Capistrano



这里好像多了几个步骤
也许会解决之前的问题
不妨试试
第一步
Provision a Postgres database on AWS RDS



第二步
第三步
第四步
Passenger版本要匹配对应的ubuntu版本



额。。。认证失败。。。
此路或许不通

只能最后一次尝试unicorn了
进阶失败
明天再来


总结一下
今天是自杀式部署Rails的第N+1天
我们在heroku上面有了小小的成功
毕竟人家把环境搭建好了方便我们直接部署
并且是有收费服务的
自己搭环境依旧是很繁琐的
还会随着系统和各种应用的版本变化而不断加大难度


好像忘记了什么
头条呢?
看来最近用脑过度真的不行了
暂停一下总结
我们需要把头条加进heroku


开始快进模式
rails generate controller toutiao index
先来一个洗剪吹三件套
然后更新routes文件


Rails.application.routes.draw do
  root 'toutiao#index'
end


然后在toutiao controller里添加一个json处理器httparty


class ToutiaoController < ApplicationController
  def index
  	  @hotels = HTTParty.get("https://www.toutiao.com/api/pc/media_hot/?media_id=4438822676").parsed_response
  end
end


最后把toutiao的index文件改成


<h1>华声在线 - 头条号新闻列表</h1>
<table>
  <thead>
    <tr>
      <th>新闻标题</th>
      <th>发布日期</th>
      <th colspan="3"></th>
    </tr>
  </thead>
  <tbody>
    <% @hotels['data']['hot_articles'].each do |hotel| %>
      <tr>
        <td><a target="_blank" href="https://www.toutiao.com/<%= hotel['url'] %>"><%= hotel['title'] %></a></td>
        <td><%= hotel['publish_time'] %></td>
      </tr>
    <% end %>
  </tbody>
</table>


当然还要记得gem里添加httparty



bundle一下然后本地rails s



ok,没问题,那就最后push到heroku里



打完收工




那么现在问题依然就剩下最后的
如何把这个app部署到亚马逊的ec2上了
cap的那玩意儿好像有很复杂的登录认证
只能重新试试unicorn了
明天就是圣诞趴了
希望能在大吃大喝之前完成测试吧


生命在于运动
技术改变生活
吃饱了才有力气干活

此条目发表在有用的分类目录,贴了, , , , 标签。将固定链接加入收藏夹。

How to Deploy Your Rails App onto Heroku 2018 Version》有1条回应

  1. Pingback引用通告: How to Deploy Your Rails App onto Amazon EC2 via Unicorn + Nginx 2018 version | 睡前故事之不想长大

发表评论