以前はasset_packagerを使用していましたが、その機能は控えめで、javascriptおよびcssファイルのコメント、余分なスペース、改行を削除するだけです。 したがって、私は別の方法を探し始めました。 私のソリューションを提供します。
packr gemをインストールする
config / environment.rbファイルに行を追加します
設定 gem 'packr' ,: lib => false
そしてsudo rake gemsを実行します:インストール
スクリプトファイルのリストを作成する
通常のファイルyamの内容を持つconfig / js_files.ymlを作成しましょう:
ベース:
-swfobject。 js
-jquery - 1.3.2。 js
-jquery。 メディア js
-jquery。 マークアップ 。 js
-jquery。 マークアップ 。 設定します。 js
-アプリケーション。 js
ファイルの初期化
ファイルのリストを取得するには、ファイル初期化子/ javascript_files.rbを作成します
JAVASCRIPT_FILES = YAML :: load ( File。Read ( "#{RAILS_ROOT} /config/js_files.yml" ) ) 。 symbolize_keys
RAILS_ENV == "production"の場合
JAVASCRIPT_FILES_PACKED = Proc 。 新しい { prod_files = { } ; JAVASCRIPT_FILES。 各 { | キー、値| prod_files [ key ] = value。 マップ { | v | "packed /" + v } } ; prod_files } 電話する
ActionView ::ヘルパー:: AssetTagHelper register_javascript_expansion JAVASCRIPT_FILES_PACKED
他に
ActionView ::ヘルパー:: AssetTagHelper register_javascript_expansion JAVASCRIPT_FILES
終わり
このコードは、本番環境のjavascriptのパスが「パックされた」サブフォルダーに変更されることを示しています。
ActionView ::ヘルパー:: AssetTagHelper register_javascript_expansion JAVASCRIPT_FILES-js_files.ymlで指定されたキーを持つjavascript_include_tagヘルパーの複数のファイルを接続できます。
Javascriptをテンプレートに追加する
javascript_include_tag :base 、: cache => "base_packed"
:キャッシュ、config.action_controller.perform_caching = trueが設定されている場合、base_packed.jsファイルが1つ提供され、その内容はbaseにリストされているすべてのファイルになります。
パッケージングのタスク
ファイルlib / tasks / packr.rakeを作成します
「packr」が 必要
名前空間:packr do
タスク:パック する
files = YAML :: load ( File。read ( "#{RAILS_ROOT} /config/js_files.yml" ) ) [ "ベース" ]
ファイル。 それぞれ が | ファイル|
「#{file}パッキング...」
ファイル open ( "#{RAILS_ROOT} / public / javascripts / Packed /#{file}" 、 'wb' ) do | f |
f。 write ( Packr。pack ( File。read ( "#{RAILS_ROOT} / public / javascripts /#{file}" ) 、:shrink_vars => true 、: private => true 、:base62 => true ) )
終わり
puts "packed \ n \ n "
終わり
終わり
終わり
このコードに関するほんの少しの言葉、ここでは「ベース」キーを持つファイルのみがパックされ、「javascripts / Packed」フォルダーに入れられます。記事の最後に戻ります。
これで、すべてのパッケージングの準備が整いました。 ただし、その前に「javascripts / packed」フォルダーを作成する必要があります。作成しないと、エラーが発生します。
パッカーを起動するには、rake packr:packコマンドを実行します。 パッケージ化されたファイルは、以前に作成されたjavascripts / packedファイルにあります。
さらなる改善
最初:
スクリプトでは、パックされたファイルのフォルダーが示され、各スクリプトで指定されます。 普遍性のために、定数に入れてください。
第二:
キーからのファイルはタスクのみにパックされます:ベース、ここでこのパラメーターを行から削除する必要があります
files = YAML :: load ( File。read ( "#{RAILS_ROOT} /config/js_files.yml" ) ) [ "ベース" ]すべてのキーにパスを作成します。 必要に応じて、キーをパッケージ化する必要があるパラメーターを追加します。
第三:
javascriptソースファイルはまだ「public / javascripts」フォルダーにあります。たとえば、「lib / javascripts」に移動する必要があります。 生産では、それらはそこでは役に立たない。 開発では、単にlibからpublicへのリンクを作成できます。 本番環境では、「public / javascripts」でパックされたファイルをパックする必要があり、「packed」フォルダーは必要ありません。 同時に、initializers / javascript_files.rbスクリプトも簡素化されます。 ファイルを実稼働環境と開発環境に分ける必要はありません。
4番目:
サーバーを再起動する前に、ファイルをサーバーに圧縮する必要があります。 capistranoを使用する場合、たとえば次のようにできます。
タスク:before_symlink do
「mkdir -p#{release_path} / public / javascripts」を実行します
「rake packr:pack」を実行します
終わり
提案やコメントを歓迎します。
ご清聴ありがとうございました!