2015-06-09 59 views
0

对于一般的rails和web开发我相当陌生,所以也许我忘记了做一些简单的事情,但是我一直在这个问题上停留了好几个小时。我试图将我的Rails应用推向Heroku,并且不断收到一条消息“预编译资产失败”。通过控制台滚动起来,我真的看到错误的地方是在向Heroku推送Rails应用程序时未能预编译资产

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之一在localhost:3000上运行时不起作用。除此之外,该网站在localhost上运行良好,但Heroku不会允许我无误地推送它。即使我删除了本地所有的东西,并且从头开始克隆主分支,这已经托管并且在不同的Heroku上运行良好,但当我尝试自己推送它时,仍然出现错误。我认为问题的一部分可能与我们使用sqlite3 gem进行开发的事实有关,但与Heroku需要的postgres进行生产有关。不过,我对于使用数据库真的很陌生,所以我不知道这是否确实是正确的,或者我忘了做任何事情。

在此先感谢您的帮助,我花了数小时搜索这个问题,并完全陷入困境。

编辑:在花费太多时间后发现解决方案。问题的根源似乎是我在所有尝试的rake命令之前没有使用“bundle exec”。根据我的理解,当您用于特定项目的宝石版本与系统范围内安装的版本不匹配时,这是必需的。

回答

0

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

您可以通过运行rake db:migrate运行rake assets:precompile,之前解决这个问题,但你应该知道,你的资产将动态地重新计算一次预编译,和任何数据在预编译点的数据库中存在的数据你”将被卡住使用。

+0

我试过了,仍然没有运气。我可以在本地进行预编译而不会出错,但是当我推送到Heroku时,它会在“捆绑安装”之后再次自动运行“rake资产:预编译”。似乎如果我可以在预编译之前在Heroku一侧运行“rake db:migrate”,那可能会修复它,但是当我推送到Heroku时,一切都会自动完成 –

+0

您可能不应该在您的数据库中建立依赖关系资产。资产是完全静态的,他们实际上不需要依赖数据库来存储数据。 – meagar

+0

我想我们可能必须这样做这个项目。该项目的一部分涉及使用谷歌地图API并根据我们以前收集的数据在其上放置标记,所以我相信在这种情况下它必须依赖于数据库。即使我们这样做并不是最佳做法,但我的主要关注点是首先将它正确地部署到Heroku,以便测试我写的内容,出于某种原因,这对我的所有队友来说工作得非常好但不适合我。 –

0

我也遇到这种类型的问题。

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

那么请运行

rake assets:precompile --trace RAILS_ENV=production 
+0

您是否将config.assets.precompile设置为true?它位于assets.rb文件中(在production.rb中有一个注释,它被移动了,所以也许它是新版rails版本的一部分)。无论哪种方式,这种方法也没有运气。 –

+0

好吧,我玩了一下你说的多一点,代码终于推了,但现在我得到了Heroku的应用程序错误,并且日志显示应用程序不断崩溃。不知道这是一个完全不同的问题,但它似乎已经取得了一些进展 –

+0

你能告诉我,哪种类型的错误发生 – djrock

相关问题