今天想笔记的是把自己写的Ruby on Rails项目部署(Deploy)到Heroku!

Heroku是Salesforce公司旗下的云端服务商,支持多种程序语言像是Ruby,PHP,Python等等。

提早让应用程序能快速建置、部署的主要好处就是提早一步发现问题啰,

如果将所有功能都写好再一起丢上去,可能会不容易发现不同的错误是分别出在哪里!

而且能在网路上让全世界看到自己努力实作的成果,还是比只有在本机localhost观赏更有成就感的。

以下以我在前篇文章写的Ruby on Rails项目为例:

Step.1 Getting started on Heroku with Ruby

二话不说,我们先到Heroku的申请页面用好自己的帐号,然后进入后台选择Ruby程序语言,按下create new app:

页面会跳转至如何设定Ruby的教学文件,开始一步步研究它:

A.在Terminal确定Ruby版本:ruby -v

tingdeMacBook-Air:~ tingtinghsu$ ruby -v

ruby 2.4.2p198(2017-09-14 revision 59899)[x86_64-darwin17]

B.安装bundler:输入gem install bundler

在Ruby世界里,

Gem代表套件,是各种打包好的代码,让开发效率更加速,节省工程师的宝贵时间。*

而Bundler是管理Gem相依性(dependencies)的工具,解决不同套件之间的依存关系,避免因为版本问题而产生冲突。*

tingdeMacBook-Air:~ tingtinghsu$ gem install bundler

Fetching: bundler-1.16.4.gem(100%)

Successfully installed bundler-1.16.4

Parsing documentation for bundler-1.16.4

Installing ri documentation for bundler-1.16.4

Done installing documentation for bundler after 8 seconds

1 gem installed

可以看到指令已经自动帮我装好了bundler-1.16.4.gem

C.安装Git

如果你的还没有装Git版本控制系统的话,Heroku教学文件也附上Git官网安装连接。

以上的步骤对接下来故事的发展很重要喔!

Step2.在你的OS设定Heroku CL界面

接下来进入Set Up页面照着步骤进行(vmwork):

A.用Homebrew安装Command Line界面

由于我使用的是MacOS,除了直接下载图形化安装界面,文件提到我可以:

使用Homebrew的指令brew install heroku/brew/heroku。

什么是Homebrew呢?这里PTT的大大提到Mac专用的套件管理系统(就是像ubuntu的apt-get)。

来看看自己以前是否有装过(因为很有实验精神的我很爱乱碰一些东西):brew -v

tingdeMacBook-Air:~ tingtinghsu$ brew -v

Homebrew 1.4.0

Homebrew/homebrew-core(git revision fc09;last commit 2017-12-12)

记录显示一年前有玩弄过~

果然今年开始养成写笔记的好习惯是正确的,不然做过什么有趣的事都忘记了,就很可惜呢。:)

现在我可以放心的输入指令brew install heroku/brew/heroku:

如果还没安装的人,可移驾至Homebrew官网瞧瞧~

从以下代码brew update可看到安装heroku的同时,系统也帮我把2017年的Homebrew 1.4.0更新到Homebrew 1.7.2:

tingdeMacBook-Air:~ tingtinghsu$ brew update

Updated 1 tap(heroku/brew).

==> Updated Formulae

heroku/brew/heroku✔

tingdeMacBook-Air:~ tingtinghsu$ brew -v

Homebrew 1.7.2

Homebrew/homebrew-core(git revision 14e75;last commit 2018-08-30)

B.正式进入Heroku Command Line

关于部署Deploy,参考教学文件,首先移动到你项目的路径位置:(我的以yelpdemo文件夹为例)。

输入指令heroku login,然后输入你的heroku帐号密码:

$ heroku login

Enter your Heroku credentials.

Email: user@example.com

Password:

下一步是输入指令heroku create:代表我们已经在Heroku上建立app(应用程序)了。

https://ithelp.ithome.com.tw/upload/images/20180830/20111177Zb0XfVJgEz.png

以上显示我已经在Heroku上开一台服务器,Heroku随机分配的名称叫做dry-sea-32555,

用git remote -v指令确认一下git在heroku远端的节点:

tingdeMacBook-Air:yelpdemo tingtinghsu$ git remote -v

heroku https://git.heroku.com/dry-sea-32555.git(fetch)

heroku https://git.heroku.com/dry-sea-32555.git(push)

如果你想把网址改成好记一点的,可以输入heroku rename+你喜欢的名称:

tingdeMacBook-Air:yelpdemo tingtinghsu$ heroku rename tingsrailsdemo

Renaming dry-sea-32555 to tingsrailsdemo…done

Git remote heroku updated

接着去改完名的这个网址瞧瞧:

太好了,服务器完工!

Step3.Getting started on Heroku with Rails

重头戏「利用指令部署项目至Heroku」开始上场!

以下纪录在把Ruby on Rail项目往Heroku上面推之前,记得到程序构架里修改的步骤。

A.首先,确定Rails版本rails -v:

tingdeMacBook-Air:yelpdemo tingtinghsu$ rails -v

Rails 5.1.6

这时候一定要用力参考这篇如何设定Rails的教学文件Getting Started on Heroku with Rails 5.x,让我们的代码可以顺利在网际网络上运行。记得参考的Heroku文件必须搭配相应的rails版本,如果你的rails版本是4或更旧的版本,文件里也有连接。

B.建立Heroku gem:

还记得刚刚文章开头我们聊过打包好的代码gem(套件),这时马上是个练习的好机会。

Horoku高度推荐我们开发项目所使用的数据库是Postgresql:

If you’re using an existing app that was created without specifying --database=postgresql,you need to add the pg gem to your Rails project.

Edit your Gemfile and change this line:gem 'sqlite3'To this:gem 'pg'

所以现在来到我的本地文件夹里的gem file,新增一个gem叫做'pg'

source 'https://rubygems.org'

git_source(:github)do |repo_name|

repo_name =“#{repo_name}/#{repo_name}”unless repo_name.include?(“/”)

“https://github.com/#{repo_name}.git”

end

# Bundle edge Rails instead: gem 'rails',github: 'rails/rails'

gem 'rails','~> 5.1.6'

#gem 'sqlite3' #database for Active Record

gem 'pg' #在这个地方新增Postgresql gem

gem 'puma','~> 3.7' #app server

gem 'sass-rails','~> 5.0' #stylesheets

gem 'uglifier','>= 1.3.0' #compressor for JavaScript assets

gem 'coffee-rails','~> 4.2' #.coffee assets and views

gem 'turbolinks','~> 5' #navigate your web application faster

gem 'jbuilder','~> 2.5' #Build JSON APIs

C.利用bundle确认套件版本之间的相依性没有冲突。

如同本文开头所提到的,这个步骤很重要。

记得,只要改过任何gemfile,就要再跑过bundle install指令,确认相依性:

Fetching gem metadata from https://rubygems.org/………

Fetching gem metadata from https://rubygems.org/.

Resolving dependencies…

bundler很乖地帮我们查找到了一个,这就是刚刚修改的Pg套件:

Fetching pg 1.1.2

Installing pg 1.1.2 with native extensions

Bundle complete!16 Gemfile dependencies,70 gems now installed.

Use `bundle info [gemname]` to see where a bundled gem is installed.

每次头一回安装一个新套件,还跟它不熟时,

你可以输入bundle info +套件名称深入了解详细数据,增强自己的印象,以及对技术的近一步认识(以免装过什么gem玩意都很容易失忆啊):

tingdeMacBook-Air:yelpdemo tingtinghsu$ bundle info pg

* pg(1.1.2)

Summary: Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/]

Homepage: https://bitbucket.org/ged/ruby-pg

Path: /Users/tingtinghsu/.rvm/gems/ruby-2.4.2/gems/pg-1.1.2

D.利用git指令,部署项目至Heroku:git push heroku master

tingdeMacBook-Air:yelpdemo tingtinghsu$ git push heroku master

Counting objects: 129,done.

Delta compression using up to 4 threads.

Compressing objects: 100%(112/112),done.

Writing objects: 100%(129/129),28.60 KiB | 0 bytes/s,done.

Total 129(delta 9),reused 105(delta 3)

* [new branch] master -> master

好了!既然推上去了,就跑去Heroku网站看一眼长什么样子:

疑?我精美的网站呢?

E.最后的最后…记得要输入指令heroku run rake db:migrate更新数据库

为了解决刚刚的问题,在这里解释:

Rails的环境分成三种

development开发模式,

test测试模式,和

production产品正式上线模式。在这里的Heroku就是我们的产品模式(zflwx)。

这个指令的意思,每次更改数据库时,记得最后要在Heroku(产品正式上线模式)跑migration。

tingdeMacBook-Air:yelpdemo tingtinghsu$ heroku run rake db:migrate

Running rake db:migrate on⬢tingsrailsdemo…up,run.3211(Free)

================================

-- create_table(:restaurants)

-> 0.0102s

== 20180823054504 CreateRestaurants: migrated(0.0107s)=======================

跑完rake db:migrate后,页面终于顺利出现。:)

后记,在最后的处理数据库部分的时候,我卡了快2小时…因为我之前预设的rails项目是使用sqlite3而不是PostgreSQL!不过为了解决bug,之后近一步参考why you cannot use Sqlite3 on Heroku,再搜寻错误讯息的关键字,增加了更多知识,顺便连下一篇文章主题都想好了:如何把你的Rails app数据库从sqlite移转成postgre。开心!XD

[Ting's笔记Day4]将Ruby on Rails项目部署到Heroku的更多相关文章

  1. Ruby on rails 项目启动流程

    众所周知,我们可以通过rails s 这个命令来启动一个rails 项目,但是这条命令都干了哪些事呢?抽时间研究了下,同时感谢tomwang1013的博客.当我们输入rails s 这个命令的时候,项 ...

  2. rails 项目部署中 nginx 报错及解决方法

    错误1 1. 报403错误,是因为启动nginx的用户默认是nobody,没有对项目目录的访问权限. user myName; worker_processes ; 错误2 2. 报404错误,是因为 ...

  3. [Ting's笔记Day8]活用套件carrierwave gem:(3)Deploy图片上传功能到Heroku网站

    前情提要: 身为Ruby新手村民,创造稳定且持续的学习步调很重要,我用的方法就是一周在IT邦写三篇笔记,希望藉由把笔记和遇到的bug记录下来的过程,能帮助到未来想用Ruby on Rails架站的新手 ...

  4. [Ting's笔记Day5]在部署到Heroku之前,将Rails项目从SQLite设定为PostgreSQL

    前情提要: Paas(平台及服务)公司Heroku是个可以把我们写好的App部署到网际网络的好地方.而本篇是我从自己的上一篇文章:将Ruby on Rails项目部署到Heroku遇到的问题,当时困扰 ...

  5. [Ting's笔记Day3]解决Git常见错误non-fast-forward问题

    写文章最难的部分,是找题材! 所以最近每次遇到bug或错误都挺兴奋开心(zflwx)的,因为又可以写笔记了 也可以记录新手学习之路上遇到的常见问题,提供其他新手参考. 最近学Udemy平台Ruby学习 ...

  6. win8平台下Ruby on Rails的第一个web应用

    最近在做一个网站web前端的前期开发,老板要求用Ruby on Rails搭建部署开发环境,上网搜之,发现整个搭建流程比较坑爹,于是用了一款集成软件Bitnami Ruby Stack一键安装到我的w ...

  7. 用VirtualBox和vagrant在win7×64上搭建ruby on rails 开发环境

    下载准备 1.vagrant 官方  WINDOWS Universal (32 and 64-bit) http://www.vagrantup.com/downloads.html 2.Virtu ...

  8. [技术博客] 软工-Ruby on Rails前端工具链的配置以及对Web应用结构设计的一点思考

    一.相关工具链简介 HAML HAML是专门面向Ruby on Rails模版语法设计的一门标记语言,其结合RoR的views部分模版语法的特点,对原来的*.html.erb(嵌入Ruby代码的HTM ...

  9. [Ting's笔记Day1] Ruby on Rails练习- MacOS安装篇

    千里之行,始于足下.喊了要学Ruby on Rails好久,今天终于要来迈向第一步:安装了! 一开始学习新的事物,主要就是跟着这个网页所说的步骤step by step. 很喜欢这个网页的设计流程,透 ...

随机推荐

  1. tomcat 启动脚本走过的坑

    最近由于 程序写的问题 tomcat经常需要重启,所以就让我写给监控tomcat并启动的脚本 例: 看着一起正常 然后就写到 crontab 计划任务里了 后来发现不管用, 找了好多文档 就是找不到问 ...

  2. Vagrant 命令详解

    1.查看当前登录的用户系统上所有活动的Vagrant环境的状态. vagrant global-status参数:--prune 清除列表中的无效条目   ... ...    

  3. 基于SPA的网页授权流程(微信OAuth2)

    先说传统MVC网站的网页授权流程. 1.用户发起了某个需要登录执行的操作 2.收集AppId等信息重定向到微信服务器 3.微信服务器回调到网站某个Controller的Action 4.在此Actio ...

  4. indexOf 引用

  5. CF1109D Sasha and Interesting Fact from Graph Theory

    CF1109D Sasha and Interesting Fact from Graph Theory 这个 \(D\) 题比赛切掉的人基本上是 \(C\) 题的 \(5,6\) 倍...果然数学计 ...

  6. maven pom.xml配置文件详解

    1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/ ...

  7. CSS3 实现圆形、椭圆形、三角形等各种形状样式

    CSS3 圆形 #css3-circle{ width: 150px; height: 150px; border-radius: 50%; background-color: #232323;} C ...

  8. 访问google提示"您的连接不是私密连接"

    直接访问google 提示这个,连subject 也变成连baidu 您的连接不是私密连接 攻击者可能会试图从 www.google.com 窃取您的信息(例如:密码.通讯内容或信用卡信息).了解详情 ...

  9. BSS, DATA, TEXT, HEAP, STACK

    BSS, block start segment, static memory, to store the global data which are not initialized. DATA, d ...

  10. mysql: 查看某库表大小

    查询所有数据库占用磁盘空间大小的SQL语句: 语句如下 1 2 3 4 5 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/102 ...