從Asset Packager升級到Assets Pipeline

最近作的一個項目是把一個原來 Rails 2 的網站升級到 Rails 3.2。 這個 project 裏面用到了Asset Packager 來管理 Javascript 文件。Rails 3.1 開始採用 Assets Pipeline 來管理 Javascript,stylesheet,和 images 等資源。在研究了一下 Asset Packager 之後,發現它作的事情和 Assets Pipeline 接近。升級的策略比較直接,以下: javascript

1. 把 public/javascripts 下的文件拷貝到 app/assests/javascripts下。 java

2. 對應文件 config/asset_packages.yml 裏面的每一個javascript package 名字,在 app/assets/javascripts 下建立一個文件。這個文件的名字格式以下: #{package_name}_package.js 。這個文件裏面列出原來 package 包含的文件。 jquery

例如文件asset_packages.yml 裏面包含以下內容 app

javascripts:
- base:
  - jquery/jquery-1.3.2
  - jquery/jquery.livequery
  - jquery/jquery.validate-1.5.1
  - jquery/jquery.blockUI
 
- ui_and_layout:
  - jquery/jquery-ui-1.7.2.custom
  - jquery/jquery.layout 網站

如今文件base_package.js 裏面內容以下 ui

  //= require jquery/jquery-1.3.2
  //= require jquery/jquery.livequery
  //= require jquery/jquery.validate-1.5.1
  //= require jquery/jquery.blockUI spa

3. 原來代碼裏面用 javascript_include_merged 來引用這些 packages。如今咱們要用Assets Pipeline的方法來引用。我的認爲比較好的辦法是本身定義javascript_include_merged,讓它去調用javascript_include_tag。具體方法以下: 調試

# file app/helpers/application.rb
module ApplicationHelper
  def javascript_include_merged(*args)
    js_files = args.map {|arg| "#{arg}_package"}
    javascript_include_tag(*js_files)
  end

end ip

4. 若是你使用assets precompiling,下面1行代碼須要加入對應的config 文件裏 資源

config.assets.precompile += %w( base_package.js )


以上步驟,不須要修改 View 裏面的代碼。調試也簡單。又是快樂的一天。

相關文章
相關標籤/搜索