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

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

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

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

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

编辑 :惊讶没有回应!?! 也许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/assetsvendor/assets吗?!?

我遇到了同样的问题,需要一段时间才能开始工作。 最初,它可以在开发上正常工作,但是当我们转向生产时,由于资产文件名现在具有“指纹”,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发布,这不应该是必要的。

我喜欢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()的路径如何以'assets'开头。

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

我也偶然发现了这个问题。 划分现有的库以使其适合当前的javascripts / stylesheets结构有点麻烦。 因此,您可以为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代码,但这取决于你。