12

对于在Rails 3.1的新资产管道中放置像Galleria这样的 jQuery 框架,我有点困惑?

我知道,从技术上讲,应该进入/vendors/assets/javascripts 但是,据我了解,Galleria带有 jQ​​uery 和主题的文件夹希望/galleria位于实时站点的根 () 中,以便正常工作。

另外,当我们在这里时,将以下脚本放在哪里,以便它只出现在带有画廊的页面上?

<script>
    $('#gallery').galleria({
        width:500,
        height:500
    });
</script>

编辑:惊讶没有回应!?!也许Galleria不那么受欢迎?这些是我要加载的文件。尽管我可以轻松移动它们,但它们像这样捆绑在一起:

vendor/
  assets/
    javascripts/
      galleria-1.2.5.js
      galleria-1.2.5.min.js
    galleria/
      themes/
        classic/
          classic-loader.gif
          classic-map.png
          galleria.classic.css
          galleria.classic.js
          galleria.classic.min.js

我以为Sprockets require_tree .会加载所有内容app/assetslib/assets并且vendor/assets?!?

4

3 回答 3

22

我遇到了同样的问题,花了一段时间才开始工作。最初,它在开发中可以正常工作,但当我们转向生产时,Galleria 默默地失败了,因为资产文件名现在有“指纹”。这似乎也是 jQuery UI 主题和许多其他此类脚本的问题。

当然,您可以回到旧的做事方式并将所有内容都“公开”,但我们希望自动合并所有 css/js 文件并以 rails 方式做事的优势。

这就是我的工作方式:

vendor/
  assets/
    images/
      classic-loader.gif
      classic-map.gif
    javascripts/
      galleria-1.2.5.js
      galleria.classic.js
    stylesheets
      galleria.classic.css.scss

将您的galleria.classic.css文件重命名为galleria.classic.css.scss. 然后替换图像引用,像这样(我有两个):

url("classic-loader.gif")变成image-url("classic-loader.gif")

更新:看起来您不需要在 Rails 3.1.1 中执行此操作。只需将文件重命名为 .css.scss,rails 就会自动为您预处理 url() 调用。

在你的app/assets/javascripts/application.js文件中,确保你有这些行

//= require galleria-1.2.5
//= require galleria.classic
//= require_tree .

在你app/assets/stylesheets/application.css的文件中,确保你有这些行

*= require galleria.classic
*= require_tree .

最后,Galleria 似乎内置了一些花哨的非标准 css 加载。这就是阻止 Galleria 在我们的生产网站上加载的原因。由于我们已经包含了样式表,我们希望禁用此行为。只需打开galleria.classic.js(或您的 Galleria 主题 javascript 文件),然后替换以下行:

css: 'galleria.classic.css',

和:

css: false,

这将告诉 Galleria 不要尝试加载样式表。

还有一件事——在尝试编译这些资产时,我遇到了Rails 3.1.0 中的一个明显错误。当我跑的时候rake assets:precompile,我得到了如下错误:

$ bundle exec rake assets:precompile
rake aborted!
classic-loader.gif isn't precompiled
  (in /vendor/assets/stylesheets/galleria.classic.css.scss)

长话短说,您需要将此行设置为config/environments/production.rb

config.assets.compile = true

一旦 3.1.1 发布,这不应该是必要的。

于 2011-09-20T04:41:36.260 回答
3

我喜欢 Arjen 的建议,尽管我认为vendor/assets/libs更合适。这是我的设置:

在 config/application.rb

config.assets.enabled = true
config.assets.paths << "#{Rails.root}/vendor/assets/libs"

在 app/assets/javascripts/application.js

//= require galleria/galleria-1.2.6.min.js

初始化:

Galleria.loadTheme('assets/galleria/themes/classic/galleria.classic.min.js');
$('#gallery').galleria();

请注意传递给的路径如何loadTheme()以“资产”开头。

我喜欢这个设置,因为它保持galleria文件夹完好无损。此外,它连接galleria-1.2.6.min.js到我的主 js 文件(少一个 http 请求)。

于 2012-03-07T02:19:56.273 回答
2

我也偶然发现了这个问题。划分现有库以使其适合当前的 javascript/样式表结构有点麻烦。因此,您可以在 application.rb 文件中添加一个额外的路径以从中加载资产,如下所示:

    # Enable the asset pipeline
    config.assets.enabled = true
    config.assets.paths << "#{Rails.root}/app/assets/libs"

在 app/assets 下创建一个“libs”文件夹,将 Galleria 库复制到该文件夹​​并将其添加到您的应用程序布局文件中:

    <%= javascript_include_tag 'galleria/galleria-1.2.4.min.js' %>
    <%= javascript_include_tag 'galleria/themes/classic/galleria.classic.min.js' %>

您也可以通过要求 js 文件来捆绑 Galleria 代码,但这取决于您。

于 2011-09-11T14:59:02.663 回答