部署Qianbao到Heroku时遇到的一些问题

Heroku现在已经是纯粹的只读PaaS了,也就是说以前还支持的SQlite现在也不能使用了。因此部署到Heroku上的Rails应用需要把使用的数据库改成PostgreSQL,并且要关闭assets的预编译功能。

修改Gemfile,将

gem 'sqlite3'

改成

gem 'pg'

在config/application.rb中添加:

config.assets.initialize_on_precompile = false

股票功能需要导入交割单文件。因为导入后的文本文件不再使用,所以可以把上传路径由public/uploads改为tmp。这样就避免了不能写文件到public目录的问题。

应用上传后运行时出现异常,使用heroku logs -t命令查看日志发现有如下错误:

Error: column "stocks.share_name" must appear in the GROUP BY clause or be used in an aggregate function

这是因为在controller中有这么一行代码:

current_user.stocks.select("share_code, share_name, sum(actual_amount) as amount").group("share_code")

在PostgreSQL中这会有问题。比如下面的数据表: 
qianbao-stocks-table

执行上面的SQL语句后,share_name的值到底是取Ruby呢还是ST Ruby?解决这个问题的方法是使用aggregate函数。

current_user.stocks.select("share_code, max(share_name) as share_name, sum(actual_amount) as amount").group("share_code")

PostgreSQL还有个问题,就是decimal类型的字段,取出来的值是字符串类型。例如:

if stock.amount < 0

它会报以下错误:

ArgumentError (comparison of String with 0 failed)

这个可以通过to_f函数解决。

if stock.amount.to_f < 0
本文转载自推酷网,原文链接:http://www.tuicool.com/articles/VjeqYn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值