rails3资产管道和文件冲突

时间:2012-02-13 08:39:56

标签: ruby-on-rails-3 asset-pipeline

我正在将现有的rails 2应用更新到rails 3,并且在理解资产管道时遇到一些麻烦。我已阅读guide,据我了解,以下任何目录中的文件都将解析为/ assets:

  • 应用程序/资产
  • LIB /资产
  • 供应商/资产

你可以使用助手访问它们......即

image_tag('logo.png')

但我不明白的是如何处理碰撞?例如,如果有以下文件,该怎么办:

  • 应用程序/资产/图像/ logo.png
  • LIB /资产/图像/ logo.png

如果我转到myapp.com/assets/images/logo.png,将返回哪个文件?我可以在我的应用程序中手动检查碰撞,但这在使用依赖资产管道的宝石时会成为一个痛点。

2 个答案:

答案 0 :(得分:2)

根据我发现的内容,您不能拥有重复的文件,因为rails只返回找到的第一个文件。

这似乎有点像设计缺陷,因为宝石可能没有命名自己的资产

答案 1 :(得分:0)

为什么不利用index manifest并将app/assets组织成分离模块?然后,您可以引用特定图像image_tag('admin/logo.png'),并以更有意义的方式免费获取您的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)