Techioz Blog

Github などのシステムには、これらのチェックをレビュー プロセスに統合する独自の方法があり、それを使用するとよいでしょう。

概要

このために髪を抜いてきました。私は資産パイプラインといつも悪い関係にあり、いつも問題を引き起こしています。そして今日もまた…。

アセットをローカルでコンパイルしてみると、すべて問題ありません。

$ RAILS_ENV=production rake assets:precompile --trace

しかし、Capistrano を使用してデプロイすると、次のようになります。

cd /var/www/xxx/releases/20140717164232 && ( RAILS_ENV=production bundle exec rake assets:precompile )

次のエラーが表示されてクラッシュします。

rake aborted!
NoMethodError: undefined method `[]' for nil:NilClass
  (in /var/www/xxx/releases/20140717164232/app/assets/stylesheets/application-sign-in.css)
/var/www/xxx/shared/bundle/ruby/2.1.0/gems/sprockets-2.11.0/lib/sprockets/sass_functions.rb:63:in `sprockets_context'

これをデバッグする方法が真剣にわかりません。ローカルでは再現できず、サーバーではエラーがどこにも表示されません。

エラーを検索し、いくつかのことを試しましたが、何も役に立ちませんでした。更新することでエラーがなくなるという人もいます。または、sass-rails gem の前に sprockets gem を追加することで解決するとのことです。

私のプロジェクトは次のように設定されています。テンプレートを表すアセットを含む gem を備えた通常の Rails 4 アプリ。次の行を使用して、すべてがコンパイルされていることを確認します。

config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif *.css *.js *.eot *.woff *.ttf *.svg)

これを解決する方法、またはデバッグする方法を知っている人はいますか?

編集

すべてのasset-url()ヘルパーを削除すると機能するようですが、繰り返しになりますが、その理由はわかりません。

解決策

同じ問題が発生しましたが、それは .scss 拡張子を持たないasset-urlを含むCSSファイルであることが判明しました。奇妙なことに、アセットをローカルではコンパイルできましたが、サーバー上ではコンパイルできませんでした。