2012-02-13 68 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)