Sprockets错误Sprockets :: NotImplementedError:未实现自定义asset_path帮助程序

时间:2016-04-29 20:37:55

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

尝试在本地预编译资产时,我得到以下信息

RAILS_ENV=production bundle exec rake assets:precompile

rake aborted!
Sprockets::NotImplementedError: Custom asset_path helper is not implemented

Extend your environment context with a custom method.

    environment.context_class.class_eval do
      def asset_path(path, options = {})
      end
    end
/Users/cman/.rvm/gems/ruby-2.2.2@jbd-ruby2.2.2/gems/sprockets-3.6.0/lib/sprockets/context.rb:198:in `asset_path'
/Users/cman/.rvm/gems/ruby-2.2.2@jbd-ruby2.2.2/gems/sprockets-3.6.0/lib/sprockets/context.rb:218:in `font_path'
/Users/cman/.rvm/gems/ruby-2.2.2@jbd-ruby2.2.2/gems/font-awesome-rails-4.6.1.0/app/assets/stylesheets/font-awesome.css.erb:15:in `_evaluate_template'

我不能为我的生活弄清楚为什么会这样 - 任何有关如何解决的建议都会非常感激!

更新

只有添加了以下内容的初始值设定项,我才能进行预编译:

Rails.application.assets.context_class.class_eval do
  def asset_path(path, options = {})
    return ''
  end
end

但是,如果我这样做,当我推送到我的临时环境时,Bootstrap的glyphicons有一条空路径,因此不会渲染:

font-face{font-family:'Glyphicons Halflings';src:url("");src:url("") format("embedded-opentype"),url("") format("woff"),url("") format("truetype"),url("") 

更新2

如果我将初始化程序修改为如下所示,我在预编译bootstrap资产中获取了一个用于glypicons的路径,但它不是预编译的Glyphicon文件,它是非编译资产路径:

Rails.application.assets.context_class.class_eval do
  def asset_path(path, options = {})
    #return ''
    "/assets/#{path}"
  end
end

@font-face{font-family:'Glyphicons Halflings';src:url("/assets/bootstrap/glyphicons-halflings-regular.eot");src:url("/assets/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("/assets/bootstrap/glyphicons-halflings-regular.woff") format("woff"),url("/assets/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"),url("/assets/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular")

这是我的gemfile.lock,因为它与资产/链轮gems有关:

bootstrap-sass (3.1.1.0)
      sass (~> 3.2)
rails (4.2.5.2)
      actionmailer (= 4.2.5.2)
      actionpack (= 4.2.5.2)
      actionview (= 4.2.5.2)
      activejob (= 4.2.5.2)
      activemodel (= 4.2.5.2)
      activerecord (= 4.2.5.2)
      activesupport (= 4.2.5.2)
      bundler (>= 1.3.0, < 2.0)
      railties (= 4.2.5.2)
      sprockets-rails
sass (3.2.19)
    sass-rails (4.0.5)
      railties (>= 4.0.0, < 5.0)
      sass (~> 3.2.2)
      sprockets (~> 2.8, < 3.0)
      sprockets-rails (~> 2.0)

3 个答案:

答案 0 :(得分:1)

我建议,主要问题是sprockets版本。在我的rails 4.2.6项目中,我使用sprockets 3.6.0,并在您的Gemfile.lock代码段中使用&lt; 3.0版本。

就像测试一样,您可以将rails更新到4.2.6并尝试新的链轮3.6.0 + sprockets-rails 3.0.1以及新的sass-rails 5.0.4sass 3.4.22 gem。我真的不知道哪个更新会有所帮助,但是,我认为它应该有用。

答案 1 :(得分:1)

我不知道这是否有资格作为答案,但我结束了我的生产Heroku回购并确认所有预编译。然后我慢慢升级了所有的宝石,一切都继续正常编译。我想我永远不会知道是什么造成的。感谢那些贡献的人。

答案 2 :(得分:1)

您可以轻松克服此问题。虽然您当前的问题更多是与版本相关的问题,但不确定您是否正确捆绑更新。但是有另一种解决方案。尝试安装以下gem:

  

https://github.com/petebrowne/sprockets-helpers