在Rails 3.1 Asset Pipeline中放置Galleria(jQuery图库框架)的位置?

Mel*_*emi 12 ruby-on-rails galleria ruby-on-rails-3.1 sprockets asset-pipeline

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

从技术上讲,我知道它应该进入/vendors/assets/javascripts 但是,我的理解是,Galleria带有jQuery和主题的文件夹想要/galleria在实时站点的root()中才能正常工作.

此外,当我们在它的时候,在哪里放置以下脚本,以便它只出现在带有图库的页面上?

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

编辑:惊讶没有回应!?!也许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
Run Code Online (Sandbox Code Playgroud)

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

Adr*_*eil 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
Run Code Online (Sandbox Code Playgroud)

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 .
Run Code Online (Sandbox Code Playgroud)

在您的app/assets/stylesheets/application.css文件中,请确保您有行

*= require galleria.classic
*= require_tree .
Run Code Online (Sandbox Code Playgroud)

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

css: 'galleria.classic.css',
Run Code Online (Sandbox Code Playgroud)

有:

css: false,
Run Code Online (Sandbox Code Playgroud)

这将告诉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)
Run Code Online (Sandbox Code Playgroud)

长话短说,你需要设置这一行config/environments/production.rb:

config.assets.compile = true
Run Code Online (Sandbox Code Playgroud)

3.1.1发布后,这不是必需的.

  • 我不喜欢更改库代码,即将`url(...)`更改为`image-url(...)`.我会尽量让他们留在公共文件夹中. (2认同)

小智 2

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

    # Enable the asset pipeline
    config.assets.enabled = true
    config.assets.paths << "#{Rails.root}/app/assets/libs"
Run Code Online (Sandbox Code Playgroud)

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

    <%= javascript_include_tag 'galleria/galleria-1.2.4.min.js' %>
    <%= javascript_include_tag 'galleria/themes/classic/galleria.classic.min.js' %>
Run Code Online (Sandbox Code Playgroud)

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