将rails app推送到Heroku时无法预编译资产

时间:2015-06-09 16:42:36

标签: ruby-on-rails ruby postgresql heroku

我对铁轨和网络开发一般都很陌生,所以也许我忘了做一些简单的事情,但我已经坚持这个问题好几个小时了。我试图将我的rails应用程序推送到Heroku,并且我不断收到消息"预编译资产失败"。通过控制台向上滚动,我唯一真正看到错误的地方是

Running: rake assets:precompile
remote:        I, [2015-06-09T16:33:23.020943 #736]  INFO -- : Writing /tmp/build_a3606aeafbcd156e85ce23a261b8ffd5/public/assets/logo-7f005e1459dfe2528e40b953dcc9b0d4.png
remote:        PG::UndefinedTable: ERROR:  relation "speed_records" does not exist
remote:        LINE 1: SELECT "speed_records".* FROM "speed_records"
remote:        ^
remote:        : SELECT "speed_records".* FROM "speed_records"
remote:        rake aborted!
remote:        ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "speed_records" does not exist
remote:        LINE 1: SELECT "speed_records".* FROM "speed_records"
remote:        ^
remote:        : SELECT "speed_records".* FROM "speed_records"
remote:        (in /tmp/build_a3606aeafbcd156e85ce23a261b8ffd5/app/assets/javascripts/googlemaps.js.erb)
remote:        /tmp/build_a3606aeafbcd156e85ce23a261b8ffd5/vendor/bundle/ruby/2.0.0/gems/activerecord-4.1.4/lib/active_record/connection_adapters/postgresql_adapter.rb:822:in `async_exec'

这是一个我与其他人合作的小项目,我们全部部署分离Heroku应用程序来测试我们自己的工作,作为我们正在使用的API之一#n&# 39;在localhost:3000上运行时工作。除此之外,该网站在localhost上运行正常,但Heroku不会允许我毫无错误地推送它。即使我删除了本地的所有内容,并从头开始克隆了主分支(已经托管并且在不同的Heroku上正常工作),当我尝试自己推送它时仍然会出错。我认为问题的一部分可能与我们使用sqlite3 gem进行开发这一事实有关,但是像Heroku所要求的那样使用postgres进行生产。然而,我对使用数据库真的很陌生,所以我不知道这是否真的是正确的,或者我是否忘记做任何事情。

在此先感谢您提供任何帮助,我花了几个小时来搜索这个问题并且完全被难过了。

编辑:在花费太多时间后找到解决方案。问题的根源似乎是我没有使用"捆绑执行"在我所有尝试过的rake命令之前。根据我的理解,当您为特定项目使用的宝石版本与您在系统范围内安装的版本不匹配时,这是必要的。

2 个答案:

答案 0 :(得分:0)

您需要运行迁移。看起来您的.js.erb资产之一正在从不存在的数据库表中加载一些数据。

您可以在运行rake db:migrate之前运行rake assets:precompile,来解决此问题,但是您应该知道,一旦预编译,您的资产将动态重新计算,并且无论数据中存在什么数据预编译时的数据库是您将要使用的数据。

答案 1 :(得分:0)

我也遇到过这类问题。

Open config/environments/production.rb and make sure the following option is set to true:

然后请运行

rake assets:precompile --trace RAILS_ENV=production