10

アセットをローカルでプリコンパイルしようとすると、次のようになります

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 は次のとおりです。

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)
4

3 に答える 3

2

これが答えとして適格かどうかはわかりませんが、本番環境の Heroku リポジトリをプルダウンして、すべてがプリコンパイルされていることを確認しました。その後、すべての gem をゆっくりとアップグレードしたところ、すべてが適切にプリコンパイルされ続けました。何が原因だったのか、一生分からないと思います。貢献してくれた人々に感謝します。

于 2016-05-05T14:58:11.480 に答える
2

主な問題はsprocketsバージョンにあると思います。私のレール4.2.6プロジェクトではsprockets3.6.0を使用し、Gemfile.lockスニペットでは<3.0バージョンを使用しています。

テストと同じように、rails を 4.2.6 にアップデートして、新しい sprockets 3.6.0 + sprockets-rails 3.0.1 と fresh sass-rails 5.0.4and sass 3.4.22gem を試すことができます。この更新プログラムのどれが役立つかはわかりませんが、うまくいくはずです。

于 2016-05-04T23:58:46.427 に答える
1

この問題は簡単に克服できます。現在の問題はバージョン関連の問題であり、更新を適切にバンドルしているかどうかはわかりませんが。しかし、代替ソリューションがあります。次の gem をインストールしてみてください。

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

于 2016-05-07T18:53:41.030 に答える