2012-07-15 24 views
10

Railsで遅延アセット・プリコンパイルを実行するには、さまざまな複雑で一般的に効果のない解決策があります。バックエンド開発者は、特にプログラムをデプロイするたびに決して触れることのない資産を再コンパイルしたいとは限りませんが、Capfileからload 'deploy/assets'を介して資産がロードされ、deploy.rbにタスクを定義するのではなく、条件付きで無効にします。Capistranoでアセット・プリコンパイルを条件付きで無効にする

通常のプリコンパイルデプロイメントではcap deployを使用し、cap deploy:no_assetsを使用すると、アセットデプロイメントをスキップできます。

答えて

7

rails4は、変更されたアセットのみをプリコンパイルすることによって、この問題をスプロケットの新しいバージョンで解決します。その間、rails3アプリの場合は、turbo-sprockets-rails3の宝石をおすすめします。

この宝石は問題が既にrails4で対処したためmasterにマージされていなかったネイサン・ブロードベント、によってsprockets-railsためset of patchesとしてスタートしました。

  • がスピードアップし、あなたのRails 3つのすくい資産:READMEからそのソースファイル

  • のハッシュに基づいてのみ変更された資産を再コンパイルすることによりプリコンパイルは、のみ、両方の指紋と非を生成するために、一度コンパイル-fingerprinted資産

そして:

turbo-sprockets-rails3は、最新のバージョンのCapistranoでそのまま使用できます。

私は、Capistranoを配備しているrails-3.2.xアプリケーションでうまく動作することを確認できます。

GitHubbersの副題として、元のpull requestは、マージされていなくても、オープンソースプロジェクトにコードを提出する方法の優れた例です。

+1

ちょうどこれに自分自身を切り替え、その素晴らしいことを証明することができます! – RubberDucky

+2

私はRails 4.0を持っていますが、私は資産を変更しませんが、すべてを最初から再コンパイルします。何か案が? – scaryguy

1

この要旨は非常に有望なhttps://gist.github.com/3072362

に見えることがあり%w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb)に変更があり、その場合にのみ、プリコンパイルした場合、今見るためにするために、最後の展開から、あなたのgitのログをチェックします。

+0

私はこの要点とこれに類するものをインストールしましたが、それは効果がなかったようです。私のcapfileに 'load 'deploy/assets''を残しておくと、必要でないときにプリコンパイルが停止することはありません。 'load 'deploy/assets''を取り出した場合、必要なときでもプリコンパイルされません。 コードを更新した後に起動するトリガーが追加されています。 – RubberDucky

+0

config/deploy.rbファイルでこの要点を要求していない可能性があります。 deploy:assets:プリコンパイル・タスクを上書きします。あなたはあなたのCapfileに 'load 'deploy/assets''を保つべきです。 –

+0

これはターボスポッラケットレールよりも速いです。それは私が数分かかるチェック全体をスキップするためです。 – lulalala

14

turbo-sporocket-railsとその自動スキップスクリプトにはいくつかの落とし穴があります(後で説明します)。だから私は、以下のハックを使用するので、私は自分の意志で資産プリコンパイルをスキップするようにパラメータを渡すことができます。

callback = callbacks[:after].find{|c| c.source == "deploy:assets:precompile" } 
callbacks[:after].delete(callback) 
after 'deploy:update_code', 'deploy:assets:precompile' unless fetch(:skip_assets, false) 

は、このスクリプトは、組み込みの資産プリコンパイルフックが変更されますので、それは夢中に基づいていますskip_assetsパラメータ。 cap deploy -S skip_assets=trueに電話すると、資産のプリコンパイル全体をスキップすることができます。


私にとっては、何も変更されていないときには、ターボスポッラソケットレールはチェックを行うのに数分かかります。これは、修正プログラムをサーバーにできるだけ早くプッシュする必要がある場合には重要です。だから私は私の力をスキップする方法が必要です。

+0

このコードを正確にどこに追加して機能させるのですか? –

+0

@dtmunir deploy.rbファイルの最後の近くに追加しました。 – lulalala

+0

これはすばらしい解決策です。 Capistrano 2を搭載したRails 4アプリでも動作します。 「デプロイメント:アセット:プリコンパイル」からチェーンされた他のジョブがないことに注意してください。そうしないとスキップされます。 –

関連する問題