Sprockets error Sprockets::NotImplementedError: Custom asset_path helper is not implemented
Sprockets error Sprockets::NotImplementedError: Custom asset_path helper is not implemented
我在尝试在本地预编译我的资产时收到以下信息
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 的字形具有空路径,因此不会呈现:
font-face{font-family:'Glyphicons Halflings';src:url("");src:url("") format("embedded-opentype"),url("") format("woff"),url("") format("truetype"),url("")
更新 2
如果我将初始值设定项修改为以下内容,我会在我的预编译 bootstrap 资产中获得 glypicon 的路径,但它不是预编译的 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,因为它与 assets/sprockets 宝石有关:
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)
我建议,主要问题出在 sprockets
版本中。在我的 rails 4.2.6 项目中,我使用 sprockets
3.6.0,而在您的 Gemfile.lock
代码段中,您使用 <3.0 版本。
就像测试一样,您可以将 rails 更新到 4.2.6 并尝试新的 sprockets 3.6.0 + sprockets-rails 3.0.1 和新的 sass-rails 5.0.4
和sass 3.4.22
gem。我真的不知道这些更新中的哪一个会有帮助,但是,我认为它应该有用。
我不知道这是否符合答案的条件,但我最终只是拉下了我的生产 Heroku 存储库并确认了所有预编译的内容。然后我慢慢升级我所有的 gem,一切都继续正确预编译。我想我永远不会知道是什么原因造成的。感谢贡献者。
你可以轻松克服这个问题。虽然您当前的问题更多是与版本相关的问题,但不确定您是否正确捆绑了更新。但是有替代解决方案。尝试安装以下 gem:
我在尝试在本地预编译我的资产时收到以下信息
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 的字形具有空路径,因此不会呈现:
font-face{font-family:'Glyphicons Halflings';src:url("");src:url("") format("embedded-opentype"),url("") format("woff"),url("") format("truetype"),url("")
更新 2
如果我将初始值设定项修改为以下内容,我会在我的预编译 bootstrap 资产中获得 glypicon 的路径,但它不是预编译的 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,因为它与 assets/sprockets 宝石有关:
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)
我建议,主要问题出在 sprockets
版本中。在我的 rails 4.2.6 项目中,我使用 sprockets
3.6.0,而在您的 Gemfile.lock
代码段中,您使用 <3.0 版本。
就像测试一样,您可以将 rails 更新到 4.2.6 并尝试新的 sprockets 3.6.0 + sprockets-rails 3.0.1 和新的 sass-rails 5.0.4
和sass 3.4.22
gem。我真的不知道这些更新中的哪一个会有帮助,但是,我认为它应该有用。
我不知道这是否符合答案的条件,但我最终只是拉下了我的生产 Heroku 存储库并确认了所有预编译的内容。然后我慢慢升级我所有的 gem,一切都继续正确预编译。我想我永远不会知道是什么原因造成的。感谢贡献者。
你可以轻松克服这个问题。虽然您当前的问题更多是与版本相关的问题,但不确定您是否正确捆绑了更新。但是有替代解决方案。尝试安装以下 gem: