2012-02-13 106 views
6

我正在更新現有的rails 2應用程序到rails 3,並且在理解資產管道時遇到了一些問題。我已經通過guide閱讀並按照我的理解,在以下任一目錄的文件將解決到/資產:rails3資產管道和文件碰撞

  • 應用程序/資產
  • 的lib /資產
  • 供應商/資產

你可以使用助手訪問它們...... ie

image_tag('logo.png') 

但我不明白的是如何處理碰撞?例如,如果有下列文件:

  • 應用程序/資產/圖像/ logo.png
  • 的lib /資產/圖像/ logo.png

如果我去MYAPP。 com/assets/images/logo.png,哪個文件將被返回?我可以在我的應用程序中手動檢查碰撞,但是當使用依賴於資產管道的寶石時,這成爲一個痛點。

回答

2

根據我發現的內容,你不能有重複的文件,因爲rails會返回找到的第一個文件。

這似乎有點像一個設計缺陷,作爲一個創業板可能不會命名空間自己的資產

+0

我有jQuery的由'jQuery的rails'寶石捆綁在一起。在我的Rails項目的另一部分中,我想使用由Bower提取的不同版本的jQuery,而不放棄用於該項目其餘部分的「jquery-rails」。有沒有辦法做到這一點? – 2014-10-15 14:55:13

0

爲什麼不採取index manifest優勢和組織您app/assets到分離模塊?然後,您可以參考特定圖像image_tag('admin/logo.png'),並以更有意義的方式免費獲取您的UI代碼庫。您甚至可以將複雜的組件(如單頁應用程序)提升到它自己的模塊中,並從應用程序的不同部分重新使用它。

比方說,你的應用程序組成了三個模塊組成:公共端,管理員UI和,例如CRM讓你的代理跟蹤銷售過程,在您的公司:

app/assets/ 
├── coffeescripts 
│   ├── admin 
│   │   ├── components 
│   │   ├── index.coffee 
│   │   └── initializers 
│   ├── application 
│   │   ├── components 
│   │   ├── index.sass 
│   │   └── initializers 
│   └── crm 
│    ├── components 
│    ├── index.sass 
│    └── initializers 
├── images 
│   ├── admin 
│   ├── application 
│   └── crm 
└── stylesheets 
    ├── admin 
    │   ├── components 
    │   └── index.sass 
    ├── application 
    │   ├── components 
    │   └── index.sass 
    └── crm 
     ├── components 
     └── index.sass 

21 directories, 6 files 

不要忘記更新您的application.rb所以他們將被正確預編譯:

config.assets.precompile = %w(admin.js application.js crm.js 
           admin.css application.css crm.css)