web-dev-qa-db-ja.com

レーキアセットに関する混乱:railsのアセットパイプラインのクリーン/クリーンアップ

コマンドrake assets:cleanが実際に何をするのかを誰かに説明してもらえますか?残念ながらRailsガイドは言及していません。コマンドrake assets:cleanupもあります。違いは何ですか?

さらに、誰かが本番環境でrake assets:precompileを実行する必要があるのはいつか教えてもらえますか。すべてのアプリケーションファイルを運用サーバーに展開した後、サーバーコンソールで実行しますか?または、ローカルマシンでprecompileしてから、すべてのファイルをデプロイしますか?

皆さんありがとう

55
daniel

注:この回答はRails 3固有です。Rails 4以降については、他の回答をご覧ください。

ローカルマシンでプリコンパイルする場合、これらの生成されたアセットをリポジトリにコミットして、デプロイを続行できます。本番マシンでコンパイルする必要はありません。

しかし、問題が発生します。ソースファイル(coffescript/scss)を変更すると、代わりにプリコンパイル済みファイルを提供するため、アプリは変更を取得しません。 rake assets:cleanは、これらのプリコンパイル済みファイルを削除します。

私のプロジェクトでは、資産はデプロイメントの一部としてプリコンパイルされています。 Capistranoは非常に簡単です。

また、rake assets:cleanup

65

実行rake assets:clobber実際に資産をきれいにする。 http://www.dixis.com/?p=735

53

Sergioの答えは、Rails 3)で完全に正解でした。rake assets:cleanは、以前にpublic/assetsディレクトリにプリコンパイルされていたすべてのアセットを削除しました。

Rails 4)では、rake assets:clobberを実行して同じことを行います。

次の構成でrake assets:precompileを実行した場合(ステージングおよび実稼働でデフォルトでオンになっています):

# config/environments/production.rb
config.assets.digest = true

アセットをコンパイルすると、タイムスタンプが付けられます。これは、古いアセットをそのままにして、新しいアセットをコンパイルできることを意味します。通常、実稼働環境でこれを行いたいので、precompileを実行して新しいファイルを作成している間、Webサイトは古いファイルにアクセスします(新しいcss/javascriptを追加したため)。ここで、使用されなくなった古いファイルを削除する必要があります。 cleanは、プリコンパイルされたアセットの古いバージョンを削除し、新しいアセットをそのまま残します。

24
grouchomc

rake assets:cleanはコンパイルされたアセットを削除します。コンパイルされたアセットをリモートサーバーから削除するために、cap deploy:assets:cleanによって実行されます。

cap deploy:cleanは、一般的にリモートサーバーから古いリリースを削除します。 rake assets:cleanではありません

すくい!=キャップ

7
paul.belt

rake assets:cleancap deploy:cleanup_assetsによって実行されるようになりました。 Capfileにrequire 'capistrano/Rails/assets'を追加すると、このcap-taskを取得できます。私のcapistranoバージョンはv3.2.1です。

1
dduft