Rails 3.1 和 jquery-ui 资产

Posted

技术标签:

【中文标题】Rails 3.1 和 jquery-ui 资产【英文标题】:Rails 3.1 and jquery-ui assets 【发布时间】:2011-09-02 07:01:20 【问题描述】:

这是在另一个问题中提出的,但在 3.1rc1 中似乎没有一个解决方案适合我。

我正在尝试使用 rails 3.1 中的新资产 - 我有文件:

./vendor/assets/stylesheets/jquery-ui-1.8.13.custom.css
./vendor/assets/javascripts/jquery-ui-1.8.13.custom.min.js

然后我补充说:

//= require jquery-ui to app/assets/javascripts/application.js
*= require jquery-ui to app/assets/stylesheets/application.css

jquery-ui javascript 文件加载正常,但 css 文件显示:

Sprockets::FileNotFound (couldn't find file 'jquery-ui'
     (in /home/xanview2/xancar/app/assets/stylesheets/application.css):6):

有什么想法吗?

【问题讨论】:

【参考方案1】:

工作设置示例:

    $ cat app/assets/javascripts/application.js

    //= require jquery
    //= require jquery-ui


    $ cat app/assets/stylesheets/application.css

    /*
     *= require vendor
     *
     */


    $ cat vendor/assets/stylesheets/vendor.css

    /*
     *= require_tree ./jquery_ui 
     *
     */

    vendor/assets/ $ tree
     stylesheets
         vendor.css
             jquery_ui
                      jquery-ui-1.8.13.custom.css
                      ...
     images
        jquery_ui
            ui-bg_flat_0_aaaaaa_40x100.png
            ...

最后运行这个命令:

    vendor/assets/images $ ln -s jquery_ui/ images

享受你的 jQuery UI

【讨论】:

只需添加 //= 要求 jquery-ui 为我解决了它(因为我在 Gemfile 中有“gem 'jquery-rails'”),但如果有人定制了 jquery-ui(至少我是这么认为的)。 非常适合我,你运行 $ ln -s 命令了吗?如果您仍有问题,请在新帖子中描述,也许我或其他人会帮助您。 如果这样做,则需要编辑 css 并更改图像 url,以便通过管道处理它们。 请注意:如果使用 config.assets.debug 选项,则不需要符号链接,因为 jquery ui 样式表中的 url 将解析 OK 在 Windows 上,因为无法使用符号链接,推荐的方法是什么?【参考方案2】:

这是一篇关于 Rails 3.1 的资产管道和 jQuery UI 的精彩文章:JQuery-UI css and images, and Rails Asset Pipeline

【讨论】:

【参考方案3】:

jquery-ui-rails gem(请参阅announcement)可能会让您更幸运,它将 jQuery UI JavaScript、样式表和图像打包为您的资产。

【讨论】:

【参考方案4】:

这个话题经常出现,现在已经过了很长一段时间,情况可能会有所不同。

在 Rails 3.1.2 中,我发现了一些无需符号链接即可工作的东西。 按照上面的步骤进行操作,但是将主题的图像放在 images/ 文件夹中 jquery-ui-xxx.css 文件旁边。这让我省了很多麻烦。

是的,这意味着图像将驻留在 vendor/assets 中的 stylesheets/ 文件夹中,但它可以工作并且执行速度很快。

【讨论】:

这是对我来说坏掉的部分。而且,无法遵循 Windows 上的“vendor/assets/images $ ln -s jquery_ui/images”指令。谢谢! 谢谢你!这很快解决了我的问题。【参考方案5】:

您是否尝试过使用rails-asset-jqueryui gem?它提供 jquery-ui 和标准主题(当前为 v1.8.16)并通过资产管道提供它们。以下示例调用 Smoothness 主题。

宝石文件:

....
gem 'rails-asset-jqueryui'
...

app/assets/javascripts/application.js:

...
//= require jqueryui
...

app/assets/stylesheets/application.css:

...
= require smoothness
...

【讨论】:

【参考方案6】:

如果您使用的是 jquery-ui-rails gem:

应用程序.css

/*
 *= require jquery.ui.all
 */

应用程序.js

//= require jquery.ui.all

【讨论】:

【参考方案7】:

在我看来,通过将这些库资产排除在 assets/javascripts 和 assets/stylesheets 目录之外,可以避免很多混乱,因为 sprockets 等人对应该发生的事情有一些看法。

假设您从 themeroller 下载了一个定制的 jquery-ui zipfile。试试这个:

    将 zip 文件解压到资产目录的子目录中,类似于

    vendor/assets/jquery-ui-1.8.23.custom
    

    在 application.rb 中添加:

    config.assets.paths << Rails.root.join('vendor', 'assets', 'jquery-ui-1.8.23.custom').to_s
    

    在通常的地方添加清单文件:

    供应商/资产/javascripts/jquery-ui.js:

    //= require_tree ../jquery-ui-1.8.23.custom
    

    供应商/资产/样式表/jquery-ui.css:

    *= require_tree ../jquery-ui.1.8.23.custom
    

    在 config/environments/production.rb 中,添加(指清单文件名):

    config.assets.precompile += %w(jquery-ui.js jquery-ui.css)
    

    在视图中:

    <%= stylesheet_link_tag 'jquery-ui' %>
    <%= javascript_include_tag 'jquery-ui' %>
    

【讨论】:

我真的很喜欢这种方法,除了 #2 不能很好地扩展。我很想将我所有的供应商都保留在他们自己的结构中,这样升级很容易,而且我不必将 CSS/JS 解析到单独的目录中。我想这里的总体趋势是有人制作了一个 gem(bootstrap,jquery UI)【参考方案8】:

如果你使用这个:

https://github.com/carlhoerberg/sprockets-urlrewriter

我相信您可以将整个 shebang 转储到一个目录中并要求 css 文件...它会顺利重写相关 url。

您只需安装 gem 并将配置行添加到 application.rb

【讨论】:

以上是关于Rails 3.1 和 jquery-ui 资产的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3.1 资产管道和手动订购的 Javascript 需要

rails 3.1资产管道路由错误

Rails 3.1 资产 - 奇怪的开发服务

Rails 3.1 资产管道供应商/资产文件夹组织

如何将dojo工具包与rails 3.1资产管道和coffeescript一起使用?

Rails 3.1 资产预编译 - 包括所有 javascript 文件