在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/assets
, lib/assets
和vendor/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代码,但这取决于你。