[Ting's笔记Day4]将Ruby on Rails项目部署到Heroku
今天想笔记的是把自己写的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的更多相关文章
- Ruby on rails 项目启动流程
众所周知,我们可以通过rails s 这个命令来启动一个rails 项目,但是这条命令都干了哪些事呢?抽时间研究了下,同时感谢tomwang1013的博客.当我们输入rails s 这个命令的时候,项 ...
- rails 项目部署中 nginx 报错及解决方法
错误1 1. 报403错误,是因为启动nginx的用户默认是nobody,没有对项目目录的访问权限. user myName; worker_processes ; 错误2 2. 报404错误,是因为 ...
- [Ting's笔记Day8]活用套件carrierwave gem:(3)Deploy图片上传功能到Heroku网站
前情提要: 身为Ruby新手村民,创造稳定且持续的学习步调很重要,我用的方法就是一周在IT邦写三篇笔记,希望藉由把笔记和遇到的bug记录下来的过程,能帮助到未来想用Ruby on Rails架站的新手 ...
- [Ting's笔记Day5]在部署到Heroku之前,将Rails项目从SQLite设定为PostgreSQL
前情提要: Paas(平台及服务)公司Heroku是个可以把我们写好的App部署到网际网络的好地方.而本篇是我从自己的上一篇文章:将Ruby on Rails项目部署到Heroku遇到的问题,当时困扰 ...
- [Ting's笔记Day3]解决Git常见错误non-fast-forward问题
写文章最难的部分,是找题材! 所以最近每次遇到bug或错误都挺兴奋开心(zflwx)的,因为又可以写笔记了 也可以记录新手学习之路上遇到的常见问题,提供其他新手参考. 最近学Udemy平台Ruby学习 ...
- win8平台下Ruby on Rails的第一个web应用
最近在做一个网站web前端的前期开发,老板要求用Ruby on Rails搭建部署开发环境,上网搜之,发现整个搭建流程比较坑爹,于是用了一款集成软件Bitnami Ruby Stack一键安装到我的w ...
- 用VirtualBox和vagrant在win7×64上搭建ruby on rails 开发环境
下载准备 1.vagrant 官方 WINDOWS Universal (32 and 64-bit) http://www.vagrantup.com/downloads.html 2.Virtu ...
- [技术博客] 软工-Ruby on Rails前端工具链的配置以及对Web应用结构设计的一点思考
一.相关工具链简介 HAML HAML是专门面向Ruby on Rails模版语法设计的一门标记语言,其结合RoR的views部分模版语法的特点,对原来的*.html.erb(嵌入Ruby代码的HTM ...
- [Ting's笔记Day1] Ruby on Rails练习- MacOS安装篇
千里之行,始于足下.喊了要学Ruby on Rails好久,今天终于要来迈向第一步:安装了! 一开始学习新的事物,主要就是跟着这个网页所说的步骤step by step. 很喜欢这个网页的设计流程,透 ...
随机推荐
- 在linux系统安装tomcat后,bin文件下startup.sh启动不
Linux里的tomcat下的 bin ,没法执行, 可直接到 bin 目录下 ,执行 chmod 777 * 就可以了. [srmdev@mvxl0793 bin]$ chmod 777 * ...
- MYSQL数据模型
DROP TABLE IF EXISTS `sh_category`; CREATE TABLE `sh_category` ( `id` int(11) NOT NULL AUTO_INCREMEN ...
- 【leetcode】415. Add Strings
problem 415. Add Strings solution: class Solution { public: string addStrings(string num1, string nu ...
- XML一
HTML(HyperText Markup Language),即超文本标记语言,是用于描述网页文档的一种描述标记语言. 而XML(E ...
- linux sar命令详解
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情 ...
- day04-Python的流程控制
- sed用法说明
sed介绍 sed:stream editor 是一个行编辑器,或叫流编辑器,每次处理一行,处理完一行再处理下一行.sed并不直接处理源文件,而是读取一行后放入模式空间(patten space)里, ...
- 验证代理ip是否可用
改编自:http://www.jianshu.com/p/588241a313e7 # _*_ coding:utf-8 _*_ import urllib2 import re class Test ...
- Flask 框架
装饰器知识回顾 http://www.cnblogs.com/0bug/p/7978595.html 普通装饰器格式: def wrapper(func): def inner(*args, **kw ...
- 使用lite-server
进入项目根目录,执行下列步骤 安装lite-server npm install lite-server 新建配置文件bs-config.json bs-config.json中可以: 指定监听的端口 ...