[Ting's笔记Day5]在部署到Heroku之前,将Rails项目从SQLite设定为PostgreSQL
前情提要:
Paas(平台及服务)公司Heroku是个可以把我们写好的App部署到网际网络的好地方。而本篇是我从自己的上一篇文章:将Ruby on Rails项目部署到Heroku遇到的问题,当时困扰了快两小时,好在搜寻完解法搞定完后,就兴奋地延伸为一篇文章了!找到点子写文章果然是遇到bug的最佳副产品
Heroku的数据库是使用PostgreSQL,而这篇文章有说明为什么不用SQLite在Heroku。
但Rails框架在我们的电脑本机rails new app设定时,为了初学者快速理解学习,预设是SQLite。
所以如果没有变更数据库,直接把Rails push到Heroku上去,就会出现问题。
看完这篇数据库的文章比较,以一句话来大概解释比较sqlite与PostgreSQL,sqlite缺乏额外优化性能的灵活性,且同一时间只允许一个写入操作;可扩展的PostgreSQL提供了可靠性和数据完整性,因此是更好的选择。
[问题]
我在本机的Ruby on Rails项目所用的数据库是SQLite,当时还未想到之后会部署到Heroku。
因此,在上篇文章做到Step3 >>步骤B.建立Heroku gem:修改我的本地文件夹里的gem file,当我新增一个gem叫做'pg'这个步骤时…
问题出现了!本机遇到的错误讯息:No connection pool for ActiveRecord::Base
[解法]
Step1.修改rails项目的/config/Gemfile
Pg套件,让我们在Ruby上使用关联式数据库PostgreSQL的界面的好帮手。
(Pg套件详细数据:http://www.leafor.com)
我们可以/config/Gemfile加上这几行代码,
让在Heroku上线时候跑的是PostgreSQL,而在本机的时候还是跑SQLite。
Rails应用程序预设提供了三种不同的执行模式:
development environment:开发模式,用在你的开发的时候
test environment:测试模式,用在执行测试程序时
production environment:正式上线模式,用在实际的上线运作环境
group:production do
gem 'pg'
end
group:development,:test do
gem 'sqlite3'
end
或是写成:
gem 'sqlite3',group::development
gem 'pg',group::production
[注意]gem 'pg'后面要加逗号,啊!不然就会向我一样出现Syntax error…
欣慰的是,用错误讯息搜寻关键字,发现在stackoverflow上也有人跟我犯过同样的错误XD
https://stackoverflow.com/questions/18684527/gemfile22-syntax-error-unexpected-tidentifier-expecting-end-of-input
Step2.跑bundle install,再重启rails server。
记得,每次在Gemfile修改套件数据,都要跑bundle install处理套件相依性问题。
(如果你在本机,想避免安装任何在production环境下跑的gem,可输入:bundle install --without production)
而每次跑完bundle都要先用control+ c关掉Terminal页面的服务器,
再重启服务器rails s之后,如下图:localhost数据库的问题已解决了:
但你还是看不到首页的数据:
Step3.部署到Heroku:git push heroku master
最后两步:push!git push heroku master,
还要跑完heroku rake db:migrate指令才会生效喔!
(如果转换数据库之前有些bug,run指令的时候会提示哪些字段可能出了问题。)
首页成功显示数据库!
==
后记:
遇到这个bug让我提早了解跟ruby on rails相关的数据库概念,是一个很有价值的坑(bgrayart)!
如果你想在本机建立rails app的当下,直接设定成PostgreSQL而非SQLite(节省之后deploy的麻烦~),可以参考这篇文章:
Rails使用PostgreSQL
[Ting's笔记Day5]在部署到Heroku之前,将Rails项目从SQLite设定为PostgreSQL的更多相关文章
- [Ting's笔记Day4]将Ruby on Rails项目部署到Heroku
今天想笔记的是把自己写的Ruby on Rails项目部署(Deploy)到Heroku! Heroku是Salesforce公司旗下的云端服务商,支持多种程序语言像是Ruby,PHP,Python等 ...
- [Ting's笔记Day8]活用套件carrierwave gem:(3)Deploy图片上传功能到Heroku网站
前情提要: 身为Ruby新手村民,创造稳定且持续的学习步调很重要,我用的方法就是一周在IT邦写三篇笔记,希望藉由把笔记和遇到的bug记录下来的过程,能帮助到未来想用Ruby on Rails架站的新手 ...
- python笔记 - day5
python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ...
- (转)ZooKeeper 笔记(1) 安装部署及hello world
ZooKeeper 笔记(1) 安装部署及hello world 先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.or ...
- ActionBarSherlock学习笔记 第一篇——部署
ActionBarSherlock学习笔记 第一篇--部署 ActionBarSherlock是JakeWharton编写的一个开源框架,使用这个框架,可以实现在所有的Android ...
- OGG学习笔记04-OGG复制部署快速参考
OGG学习笔记04-OGG复制部署快速参考 源端:Oracle 10.2.0.5 RAC + ASM 节点1 Public IP地址:192.168.1.27 目标端:Oracle 10.2.0.5 ...
- [Ting's笔记Day9]活用套件Carrierwave gem:(4)使用Imagemagick修改图片大小
前情提要: 这几天我都在实验Carrierwave这套图片上传套件,也顺利部署到Heroku架站正式环境了.:) 接下来我遇到了新的问题:要如何在上传的时候,让Carrierwave gem大型siz ...
- [Ting's笔记Day7]活用套件carrierwave gem:(2)利用Amazon S3架设图片服务器
来到第7篇了!培养写作习惯真是不容易:) 在我的上一篇文章活用套件carrierwave gem:(1)在Rails实现图片上传功能,上传图片功能已经完成啦!但是目前图片仅能上传在自己的本地文件夹内孤 ...
- 将 django部署到 heroku上
为什么要这样做,因为我并没有弄懂,使用传统和推荐的方法来部署django.刚好我手里有这么一份教程我就按照这么做了. 1. 访问 http://heroku.com/ 完成一个注册,注册需要一个国外的 ...
随机推荐
- GoogLeNet 之 Inception-v1 解读
本篇博客的目的是展示 GoogLeNet 的 Inception-v1 中的结构,顺便温习里面涉及的思想. Going Deeper with Convolutions:http://arxiv.or ...
- 德州扑克AI--Programming Poker AI(译)
前言: 最近在研究德州扑克的AI, 也想由浅入深的看下, 在网上找了一圈, 发现很多文章都提到了一篇文章: Programming Poker AI. 仔细拜读了一下, 觉得非常不错. 这里作下简单的 ...
- Unity用GUI绘制Debug/print窗口/控制台-打包后测试
Unity游戏视窗控制台输出 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
- Tomcat下载和安装
一.Tomcat下载和安装 Tomcat 是一个免费的开放源代码的 Servlet 容器,它是 Apache 软件基金会的一个顶级项目,由 Apache,Sun和其他一些公司及个人共同开发而成.由于有 ...
- while RE Validation
一.简介 为什么需要正则表达式? 文本的复杂处理 正则表达式的优势和用途? 一种强大而灵活的文本处理工具: 大部分编程语言.数据库.文本编辑器.开发环境都支持正则表达式. 正则表达式定义: 正如它的名 ...
- django 多对多 增 删 改 查
一.通过url方式实现多对多的:增加,删除,编辑 代码目录: urls.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
- 重读 谢希仁《计算机网络》3 - 网络层和IP协议
- zombodb 聚合函数
zombodb 暴露基本上所有es 的集合函数为sql 函数,我们可以方便使用 比如 count FUNCTION zdb.count( index regclass, query zdbquery) ...
- 1.1.15 word调整文字与下划线之间的间距
先请按CTRL+U快捷键,或点击“下划线”按钮,然后输入一个空格,再输入文字“下划线间距”,在文字的尾部再添加一个空格.选中文字内容(注意不要选中首尾的空格),单击菜单“格式”→“字体”,在“字体”设 ...
- IndentationError:expected an indented block错误解决
Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的Python程序员,也可能陷入陷阱当中.最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分 ...