2

今天我正在使用一个我已经在 Heroku 上运行了几个月的应用程序,并试图让我在我的开发环境中运行一些东西:

rake assets:precompile

当我提交更改并推送到 Heroku 时,我的请求出现 500 个错误:

ActionView::Template::Error (jquery.flexslider-min.js isn't precompiled):

我对该怎么做有点茫然,我尝试了一些事情:

懒惰地在生产中编译(我真的不想这样做):

Bundler.require(:default, :assets, Rails.env)

具体列出所有需要“预编译”的文件(也不是很想这样做,看起来效率不高):

config.assets.precompile += ...

到目前为止,我只是简单地回滚到我的上一个工作版本。我目前无法推送新代码。将设置一个暂存环境(就像我早就应该做的那样)但不确定下一步该做什么或什么可以解决这个问题?为什么这之前没有抛出错误?

更新

rake assets:clean

似乎已经解决了这个问题,虽然我不明白为什么。有人可以分享一些对此的见解吗?

4

3 回答 3

3

如果您运行 Rails 4.0 或更高版本,rake assets:clean则已替换为rake assets:clobber.

但是,在永久删除资产方面,clean 和 clobber 目前存在一些问题。您可以在此处关注问题。https://github.com/heroku/heroku-buildpack-ruby/issues/123

于 2013-10-08T23:56:15.777 回答
2

我愿意打赌 public/assets 文件夹中 manifest.yml 中的编译版本/文件名已过时/错误。

如果您对 flexslider.js 文件进行了更改,则需要重新编译rake assets:precompile并将更新的版本推送到 github。我相信您可以在 manifest.yml 文件中设置资产的版本。

另外,我相信您可以运行heroku run rake assets:cleanheroku run rake assets:precompile.

由于版本控制和名称冲突/未存储在 github 中,我认为在 heroku 中预编译资产不是一个好主意。

您可以清理 heroku 中的资产并再次推送 repo,因此您不需要在本地预编译并推送到 github,除非本地编译中确实存在问题。

我还要花几分钟阅读http://guides.rubyonrails.org/asset_pipeline.html

另一种可能性是您的文件名存在链轮问题。为什么不使用 flexslider.js 的开发版本,将其重命名为更方便的名称,并允许 sprocket 进行缩小。

于 2013-05-30T20:23:04.080 回答
1

在 GitHub 线程中找到了解决方案:

增加 ${project-root}/config/application.rb 中的 config.assets.version 变量

在我的配置文件末尾添加 config.assets.version = '1.1' 后,资产被刷新。

于 2014-05-23T09:43:22.203 回答