Heroku不会为rails4预编译资产

时间:2013-12-17 05:03:02

标签: ruby heroku ruby-on-rails-4 asset-pipeline

这里的文档说明了在Rails4中部署期间预编译资产的heroku。

然而, 我没有看到预编译资产消息。

     Using thin (1.6.1)
       Using twitter-bootstrap-rails (2.2.8)
       Using uglifier (2.3.1)
       Using will_paginate (3.0.4)
       Your bundle is complete! It was installed into ./vendor/bundle
       Bundle completed (1.37s)
       Cleaning up the bundler cache.
-----> Writing config/database.yml to read from DATABASE_URL
       Detected manifest file, assuming assets were compiled locally
-----> Discovering process types
       Procfile declares types -> (none)
       Default types for Ruby  -> console, rake, web, worker

我在我的应用程序中遇到了bootstrap问题,导航栏无法正常加载+其他一些细微差别,我认为它是资产预编译问题。

我正在使用Rails4,Ruby2.0

我在application.rb

中启用了资源
config.assets.enabled = true

手动预编译没有帮助

heroku run rake assets:precompile

4 个答案:

答案 0 :(得分:19)

有同样的问题。我出于某种原因在本地进行了预编译,然后推送到了Heroku。

Saw Heroku给出了“检测到的清单文件,假设资产是在本地编译的”这一行,这让我意识到它并没有预先编译所有的东西。

当我做了“git add”。并且承诺,我看到它添加了一堆公共文件。把它推到Heroku让它发挥作用。所以我不得不每次都进行预编译和git添加,基本上做了Heroku的工作,并在我的公共文件夹中弄乱了。它完成了工作,但是很难解决。

我查找了heroku提到的“manifest”,并最终在公共目录中找到了“.sprockets-manifest ...”文件。

删除了那个,Heroku再次成了我的朋友。

发现这个问题是我研究的一部分,所以我想我会分享我发现的事情,以防其他人看到这个,或者有任何精心的想法。

现在我必须去看看.sprockets-manifest是否对其他任何东西都很重要....

答案 1 :(得分:4)

我在资产管道上挣扎了一段时间。关于资产管道如何在新的Rubyist中运作似乎有些混乱。根据我的经验,这是Heroku资产管道的工作流程。

  • 确保资产在localhost上本地工作(Heroku必需)
  • 使用rm -rf ./public/assets
  • 删除Rails目录中的public / assets文件夹
  • 使用mkdir public/assets
  • 创建一个新资产目录
  • 运行rake assets:precompile命令
  • 您应该会在命令行中看到预编译的资产列表
  • 资产预编译后,您应通过以下命令提交更改:git add -A然后git ci -am "commit message goes here"
  • 最后,通过git push heroku master
  • 推送到heroku

注意:这需要重复 - 在推送到Heroku之前,请确保您的资产在localhost上正常工作。

答案 2 :(得分:2)

删除public / assets文件夹有帮助。我还运行了heroku运行rake资产:干净。

After that I could see:
----> Writing config/database.yml to read from DATABASE_URL
-----> Preparing app for Rails asset pipeline
       Running: rake assets:precompile

导航栏现在加载好了!

答案 3 :(得分:0)

如果公共资产中有Detected manifest file, assuming assets were compiled locally.sprockets-manifest-*.json,则会显示消息manifest-*.json。因此,删除单个文件或整个public/assets都可以。

buildpack的源代码为here