Ошибка цепочек Sprockets::NotImplementedError: Пользовательский помощник asset_path не реализован

Я получаю следующее при попытке прекомпилировать мои ресурсы локально

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

Если я изменю инициализатор на приведенный ниже, я получу путь в моем ресурсе начальной загрузки для глипликонов, но это не путь к предварительно скомпилированному файлу 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)

3 ответа

Решение

Вы можете легко преодолеть эту проблему. Хотя ваша текущая проблема в большей степени связана с версией, и вы не уверены, правильно ли вы поставили обновление. Но есть альтернативное решение. Попробуйте установить следующий гем:

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

Я не знаю, квалифицируется ли это как ответ или нет, но я просто снял свой репозиторий Heroku и подтвердил все предварительно скомпилированные. Затем я медленно обновил все свои драгоценные камни, и все продолжало правильно скомпилироваться. Я думаю, я никогда не узнаю, что вызвало это. Спасибо тем, кто внес свой вклад.

Я полагаю, что главная проблема заключается в sprockets версия. в моем проекте rails 4.2.6 я использую sprockets 3.6.0, и в вашем Gemfile.lock фрагмент, который вы используете <3.0 версии.

Как и в тестовом режиме, вы можете обновить rails до 4.2.6 и попробовать свежие звездочки 3.6.0 + sprockets-rails 3.0.1 и свежие sass-rails 5.0.4 а также sass 3.4.22 драгоценный камень. Я действительно не знаю, какое из этих обновлений поможет, но, думаю, оно должно работать.

Другие вопросы по тегам