3

デプロイ中にアセットをプリコンパイルするために Capistrano を使用していますが、あまり役に立たないエラーが発生します。

* executing "cd -- path/to/releases/20130507161214 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"

*** rake aborted!
*** wrong argument type nil (expected Data)
*** (in /path/to/app/assets/javascripts/application.js)
*** /path/to/gems/therubyracer-0.11.4/lib/v8/context.rb:67: in 'New'

これが参照されている私のapplication.jsものです:

//= require jquery
//= require jquery_ujs
//= require bootstrap

アップデート

そのため、完全に削除して再度実行しようとしましたが、別のファイルapplication.jsについて不平を言いました(ただし、同じ役に立たないエラーです)。js次に、すべてのjsファイルを削除すると、ファイルについて不平を言い始めましたcss

すべての js および css ファイルが削除された場合、プリコンパイルは成功します (ただし、必要な js および css ファイルがないことは明らかです)。

画像以外のすべてのアセットに.js.coffeeとを使用しています。.css.scss

アップデート

@TomDaviesの回答は確かに役に立ちましたが、まだ問題があります。展開中、プリコンパイルに失敗し、情報が得られませんでした。そこで、トムが言ったことを実行しました。開発マシンでプリコンパイルしましたが、実稼働環境で、問題があることに気付きました。

それが私に与えたエラーは「予期しないINDENT」でしたが、行番号はわかりません。ファイル名だけです...

最終的に、ajax リクエストにコンマがないことに気付きました。どうやら開発環境ではそれがなくても動作しますが、それなしではプリコンパイルされません...

これが私が持っていたものです:

$.ajax 'some/url'
  success:
    alert 'yay!'

必要なものは次のとおりです。

$.ajax 'some/url',
  success:
    alert 'yay!'

一番上の行の末尾にあるカンマに注意してください...開発において優れたプリコンパイルが行われるようになりました。開発マシン (ただし実稼働環境) でのプリコンパイル中にエラーを修正すると、展開の問題が修正されると確信していましたが、役に立ちませんでした。上部の同じエラーでまだ失敗していますwrong argument type nil (expected Data)

tl;dr

開発マシンでは実行できますが、運用rake assets:precompile RAILS_ENV=productionマシンでは動作せず、上部にエラーが表示されます。これをデバッグする方法がわかりません。

4

3 に答える 3

1

これは、application.js ファイルで失敗し、コンテンツが正しいように見えるため、gem の問題の可能性があるようです。どのバージョンの Ruby を使用していますか? 別のバージョンに切り替えた場合は、gems ディレクトリをクリアして、最初から再インストールすることをお勧めします。ある Ruby バージョンにインストールされた gem が飼料を置き去りにし、別のバージョンで奇妙なことが起こるという問題を経験しました。

于 2013-05-10T17:44:10.617 に答える
1

ファイルから他の scss をインポートする場合は、ファイルを application.scss と呼ぶ必要があります。

正確なエラーはわかりませんが、アセット パイプラインの問題については、常に開発中にローカルでコンパイルしてみてください。エラーは通常、その方法ではるかに明白であり、試行錯誤をより簡単に行うことができます。アセットのプリコンパイルをローカルで機能させるために、通常は config/environments/development.rb に残しておくいくつかの手順を次に示します。

  # NOTE: To test asset pipeline in dev uncomment the following configs and run:
  #
  # $ RAILS_ENV=development rake assets:precompile
  #
  # It is recommended you rm -rf public/assets when you are finished or this may affect
  # your local dev environment
  #
  # config.assets.compress = true
  # config.assets.compile = false
  # config.assets.digest = true

そして、ここに同じ要点があります:

https://gist.github.com/atomgiant/5438672

于 2013-05-07T20:13:27.870 に答える
0

Node.js を ExecJS ランタイムとして使用することも考えています。TheRubyRacer とメモリ管理に関する文書化された問題がいくつかあり ( https://github.com/cowboyd/therubyracer/issues/350 )、プロジェクトは放棄されたようです ( https://github.com/cowboyd/therubyracer/pull /348)。

最新の Node.js がインストールされていると仮定するとEXECJS_RUNTIME="Node"、プリコンパイル タスクの先頭/末尾に追加できます。

rake assets:precompile RAILS_ENV=production EXECJS_RUNTIME="Node"

おまけとして、これによりアセットのコンパイルが桁違いに高速化されました。

于 2016-12-23T08:52:56.873 に答える