私はs3でアセットをホストしています。本番環境では、/javascripts/cache/all.jsと/stylesheets/cache/all.cssを探しています。私はキャップを使って展開するときに、プラグインを使用してs3にパブリックディレクトリをスワップしています。問題は、レールが最初に要求されるまでこれらのキャッシュファイルを作成しないため、パブリックディレクトリを転送する際に配備中にキャッシュファイルが周囲にないことです。展開中にこれらのファイルを強制的に作成する簡単な方法はありますか?レールにアセットキャッシュファイルを作成させる
答えて
キャッシュファイルを作成する実際のレールモジュールはActionView::Helpers::AssetTagHelper
です。デプロイ中にキャッシュファイルを作成するために再利用できる場合があります。以下は私のために大丈夫働いた:
require 'action_view'
class AssetCacheWriter
include ActionView::Helpers::AssetTagHelper
def write
write_asset_file_contents(File.join(JAVASCRIPTS_DIR, "all.js"), compute_javascript_paths([:all], true))
write_asset_file_contents(File.join(STYLESHEETS_DIR, "all.css"), compute_stylesheet_paths([:all], true))
'standard_all')
end
end
どちらも私はレールコードから持ち上げられてきたものをwrite_asset_file_contents
呼び出し。 _DIR
の定数はインクルードされたモジュールで定義されており、compute_xxx_paths
呼び出しのtrue
パラメータは、すべてのファイルを再帰的にインクルードする必要があることを示しています。
namespace :sample
task :assets do
AssetCacheWriter.new.write
end
end
私はrakeタスクファイルでこれを使用します。
は、私はちょうどファイルを書いたシンプルなキャップタスクを作成しました。追加のクラスを作成するからあなたを保存し、あなたがエンジンヤードクラウドを使用している場合stylesheet_link_tag/javascript_include_tag
desc "Clears javascripts/cache and stylesheets/cache" task :clear => :environment do
puts "Clearing javascripts/cache and stylesheets/cache"
FileUtils.rm(Dir['public/javascripts/cache_[^.]*']) # use :cache => 'cache_all.js' in stylesheet_link_tag
FileUtils.rm(Dir['public/stylesheets/cache_[^.]*']) # use :cache => 'cache_all.css' in javascript_include_tag
end
desc "Recreate the javascripts/stylesheets cache."
task :generate => [:environment, :clear] do
puts "Recreate the javascripts/stylesheets cache"
ActionController::Base.perform_caching = true
app = ActionController::Integration::Session.new
app.get '/'
end
からの値を使用しているので、あなたはDRYそれを維持する、これは私がやったことです:
を追加
require 'assetwriter'
namespace :assetcache do
desc "Clears javascripts/cache and stylesheets/cache"
task :clear => :environment do
puts "Clearing javascripts/cache and stylesheets/cache"
FileUtils.rm(Dir['public/javascripts/cache_[^.]*'])
# use :cache => 'cache_all.js' in stylesheet_link_tag
FileUtils.rm(Dir['public/stylesheets/cache_[^.]*'])
# use :cache => 'cache_all.css' in javascript_include_tag
end
desc "Recreate the javascripts/stylesheets cache."
task :generate => [:environment, :clear] do
puts "Recreate the javascripts/stylesheets cache"
AssetCacheWriter.new.write
end
end
/lib/tasks/assetcache.rakeファイルは、私が 'ACTION_VIEW' クラスを必要と
/lib/assetwriter.rb追加しました( write_asset_file_contents:
AssetCacheWriterはActionView ::ヘルパー:: AssetTagHelper
はデフ write_asset_file_contents(真)[すべて] File.join(JAVASCRIPTS_DIR、 "キャッシュ/ all.js")、compute_javascript_pathsを()書きが含まFile.join(STYLESHEETS_DIR、 "キャッシュ/ all.css")、compute_stylesheet_paths([すべて]、真)) 終了
エンド
その後、私は
を/deploy/after_restart.rbに追加ラン「のCD#{release_path} & &束EXECすくいassetcache:生成」
を私は順序が(したがって、例えば、jQueryの他のスクリプトの前に含まれている)大事ので、代わりに以下の手法を用い含むことを見出しました。 :defaultsの使用も許可します。そして
#!/usr/bin/env ruby
RAILS_ROOT = File.expand_path(File.dirname(__FILE__) + '/../')
Dir.chdir(RAILS_ROOT)
RAILS_ENV = ENV['RAILS_ENV'] || 'development'
puts "Bundling assets for environment #{RAILS_ENV}"
require File.join('config', 'environment')
AssetCacheWriter.new.write
キャップタスク:
まずLIB/asset_pacakger:
require 'action_view'
class AssetCacheWriter
include ActionView::Helpers::AssetTagHelper
include ActionView::Helpers::TagHelper
def write
ActionController::Base.perform_caching = true
stylesheet_link_tag *ApplicationController::STYLESHEET_INCLUDES
javascript_include_tag *ApplicationController::JAVASCRIPT_INCLUDES
end
end
そしてスクリプト/ package_assets上記のアプローチのレール3.0.7なしで
desc "Package assets"
task :package_assets do
%x[#{Dir.getwd}/script/package_assets]
%x[svn commit #{Dir.getwd}/public/javascripts/defaults.js #{Dir.getwd}/public/stylesheets/defaults.css -m "(capistrano) packaging assets to trunk"]
logger.info "packaged assets to trunk"
end
動作するように見えた。私は設定が未定義であることについて多くのエラーを得ました。
Railsのコードを見て手を汚した後、私はこの解決策を思いつきました。
のlib /タスク/ cache_assets.rakeは
require 'asset_packager'
desc "cache assets"
task :cache_assets do
puts "-----> Caching Assets"
AssetCacheWriter.new.write
puts "-----> Done!"
end
そしてlibに/ asset_packager.rb
require 'action_view'
class AssetCacheWriter
include ActionView::Helpers::AssetTagHelper
include ActionView::Helpers::TagHelper
def config
ApplicationController
end
def controller
ApplicationController
end
def write
ActionController::Base.perform_caching = true
# You can replace these with your app's cached assets. They should look the same
# as in your view templates.
stylesheet_link_tag :vendor, :defaults, :cache => 'cached/all'
javascript_include_tag :bd_defaults, :'vendor-head', :cache => 'cached/defaults_vendor'
end
end
そして、それを実行するために、単に実行rake cache_assets
- 1. ユーザグループを作成するレール
- 2. レールにシングルトングローバルオブジェクトを作成するには
- 3. フレンドシップモデルアソシエーションをレールに作成する
- 4. レールに在庫ポートフォリオを作成する
- 5. レールに新しいオブジェクトを作成できません
- 6. セルフID、レコードが作成される前に - レール3
- 7. レールでモデルを作成する方法
- 8. オブジェクトを作成するcronジョブ - レール
- 9. レール付きオンラインウェブサイトビルダーを作成する
- 10. M:M関係を作成するレール
- 11. レールで動的ルートルートを作成する
- 12. レールでドロップダウンリストを作成する
- 13. レールでユーザアクションストリームを作成する
- 14. レールに作成する際にレコードの2つのバージョンを作成する
- 15. レールでのカスタムメソッドの作成
- 16. レールに意図せぬNULLエントリを作成するテーブルを結合する
- 17. Railsコンポーザーdevise-railsはレールDBを完成させません:
- 18. procfileが2度レールに作成されました
- 19. ユーザーがページをレールに作成できるようにする
- 20. レールでルビーのモデルを作成できません
- 21. レールで新しいレコードを作成できません
- 22. レールでテストデータベースを作成できません。3.2 postgresで
- 23. vue.jsでレールを動作させる方法は?
- 24. habtmで作成された結合テーブルのモデルをレールに作成すると問題になりますか?
- 25. サインアップ直後にサインインを防止する(レールを作成する)
- 26. www。一般的にメールやレールを作成するには?
- 27. イメージをレールに作成するには? (from imagecreate()from php)
- 28. ブートストラップ/レールに行と列を動的に作成する
- 29. テーブルのモデルをレールに動的に作成する
- 30. レールで動的に拡大するフィードを作成する