【问题标题】:Issue with Precompililing Assets in Rails App在 Rails 应用程序中预编译资产的问题
【发布时间】:2014-11-13 10:21:45
【问题描述】:

我的 rails 应用使用 Rails 3.2.15。当我尝试部署到 Heroku 时,出现错误:

Asset logical path has no extension: ]

在我看到的“资产逻辑路径”错误的其他示例中,冒号后面的元素是文件名。为什么它认为有一个名为“]”的文件?

这是完整的错误:

 /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/asset.rb:36:in `initialize'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/base.rb:380:in `new'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/base.rb:380:in `build_asset'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/index.rb:94:in `block in build_asset'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/caching.rb:58:in `cache_asset'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/index.rb:93:in `build_asset'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/base.rb:287:in `find_asset'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/index.rb:61:in `find_asset'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/manifest.rb:211:in `block in find_asset'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/manifest.rb:257:in `benchmark'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/manifest.rb:210:in `find_asset'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/manifest.rb:119:in `block in compile'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/manifest.rb:118:in `each'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/sprockets/manifest.rb:118:in `compile'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-rails-2.0.0.backport1/lib/sprockets/rails/task.rb:60:in `block (3 levels) in define'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2.backport2/lib/rake/sprocketstask.rb:146:in `with_logger'
       /tmp/build_4d16c741-7af1-443a-b0f0-8aad5d279d8f/vendor/bundle/ruby/1.9.1/gems/sprockets-rails-2.0.0.backport1/lib/sprockets/rails/task.rb:59:in `block (2 levels) in define'
       Tasks: TOP => assets:precompile
       (See full trace by running task with --trace)
 !
 !     Precompiling assets failed.
 !

 !     Push rejected, failed to compile Multipack app

我可以通过运行以下命令在本地重新创建此错误

 bundle exec rake assets:precompile

一些背景:

我正在尝试将 bootstrap-sass 与我的 Rails 3.2 应用程序集成。我按照 gem 页面上概述的 3.2.x 安装说明进行操作:

https://github.com/twbs/bootstrap-sass

这在本地工作,但是当我尝试部署时,我得到了上述错误。

【问题讨论】:

  • 确认你在开发中运行了“RAILS_ENV=production bundle exec rake assets:precompile --trace” [ushing to Heroku ?我还记得有一次必须运行“rake assets:clean”,然后在推送到 Heroku 之前进行预编译。
  • 感谢您的帮助。当我尝试运行第一行时,我得到错误数据库 project_production 没有出现(它没有出现)。你分享的那条线是做什么用的?
  • 我确定你读过这篇文章? stackoverflow.com/questions/20856247/…
  • 我的理解——在开发过程中,java 和 coffescript 是在控制器执行的每个操作中预编译的。在生产环境 Heroku 中,在执行代码之前完成预编译(例如 java 和 coffeescript 压缩等)。每当您在开发中对 javascript/coffeescript 进行更改时,都需要预先编译,然后才能在 Heroku 中看到这些更改。确认您正在开发环境中进行预编译?
  • @txdavidtx 是的,我看过那篇文章。即使我使用的是 Rails 3.2,我也尝试添加该建议,但它没有解决问题。

标签: ruby-on-rails heroku assets sprockets precompile


【解决方案1】:

如果您仍在使用此功能或其他人像我一样发现此功能,则麻烦在于将没有扩展名的任何内容放在 app/assets 中,您可以安全地将文件移动到 供应商/资产 以避免此错误。例如,我最近用 bower 安装了第三方文件并将它们的位置设置为 app/assets,但在推送到 heroku 时遇到了麻烦。将它们拉出并进入供应商/资产后,它工作正常。另请参阅:https://github.com/sstephenson/sprockets/issues/347https://github.com/stve/bower/pull/4/files 对于问题和解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2015-07-22
    相关资源
    最近更新 更多