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")
执行上面的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