[Ting's笔记Day4]将Ruby on Rails项目部署到Heroku

时间:2023-01-06 15:25:26

今天想笔记的是把自己写的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. Could not find a getter for orderItems in class

    ::, ERROR ContextLoader: - Context initialization failed org.springframework.beans.factory.BeanCreat ...

  2. php session 生命周期代码实例

     php session 生命周期代码实例        我们为什么需要Session,就是因为我们需要存储各个用户的状态数据.那么试问,如果由你来设计解决这个需求的方案,那么也许你会设置这样一个数据 ...

  3. iOS坐标转换失败?UIKit的屠神坑

    使用UIKit的坐标转换方法convertxxx,千万要注意: 一个控件可以转换子控件上的某个点,到另外一个控件上 但是不能转换自己本身的点,到另外一个控件上,否则会数量加倍 所以,一个控件若想转换本 ...

  4. 使用Intent传递对象

    Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动.发送广播.启动服务等.在进行上述操作的时候,我们还可以在Intent 中添加一些附加数据,以达到传值的效果,比如在FirstActi ...

  5. String的valueOf()用于将其它类型转换为字符串

    String的valueOf()重载方法可将double类型,int类型,boolean类型以及char数组类型等变量转换为String类变量. 注:String的valueOf()可将char数组转 ...

  6. Hbase伪分布式安装

    前面的文章已经讲过hadoop伪分布式安装,这里直接介绍hbase伪分布式安装. 1. 下载hbase 版本hbase 1.2.6 2. 解压hbase 3. 修改hbase-env.sh 新增如下内 ...

  7. 基于GTID环境的数据恢复

    下面说一个线上环境的数据恢复案例,线上环境误操作的事情,随时都有可能发生的,这时候运维DBA或者DBA会想,没人会傻到把数据库干掉的吧?又或者没有会闲得蛋痛删除了几条数据又想恢复这么无聊吧?适适这样的 ...

  8. 0x02 Spring Cloud 学习文档

    每个Spring项目都有自己的; 它详细解释了如何使用项目功能以及使用它们可以实现的功能. Spring Cloud 版本 参考文档 API文档 Finchley SR2 CURRENT GA Ref ...

  9. react router @4 和 vue路由 详解(一)vue路由基础和使用

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 1.vue路由基础和使用 a.大概目录 我这里建了一个router文件夹,文件夹下有in ...

  10. Canvas控件之CanvasGroup

    Canvas Group可以用来控制一组不需要个别控制的UI元素的某些方面,CanvasGroup的属性会影响他所有children的GameObject 其中有四个选项: -Alpha:这个选项很多 ...