Questions tagged «asset-pipeline»

资产管道提供了一个框架,用于连接和最小化或压缩JavaScript和CSS资产。它还增加了用其他语言和预处理器(例如CoffeeScript,Sass和ERB)编写这些资产的功能。

19
Rails 4:如何在Turbo-Links中使用$(document).ready()
尝试以“ rails方式”组织JS文件时,我在Rails 4应用程序中遇到了一个问题。它们以前分散在不同的视图中。我将它们组织到单独的文件中,并通过资产管道进行编译。但是,我刚刚了解到,在打开涡轮链接时,jQuery的“就绪”事件不会在随后的点击中触发。第一次加载页面时,它可以工作。但是,当您单击链接时,其中的任何内容ready( function($) {都不会执行(因为该页面实际上不会再次加载)。好的解释:在这里。 所以我的问题是:什么是确保涡轮链接打开时jQuery事件正常工作的正确方法?您是否将脚本包装在特定于Rails的侦听器中?或者,也许rails有一些使它不必要的魔力?该文档对如何工作有点含糊不清,尤其是在通过清单(如application.js)加载多个文件方面。

29
使用Rails 3.1,您将“特定于页面的” JavaScript代码放在哪里?
据我了解,您所有的JavaScript都合并为1个文件。默认情况下,Rails在添加//= require_tree .到application.js清单文件的底部时会执行此操作。 这听起来像是真正的救命稻草,但我有点担心页面特定的JavaScript代码。此代码是否在每个页面上执行?我想要的最后一件事是,当只在一页上需要所有对象时,将为每页实例化我的所有对象。 此外,代码是否也可能发生冲突? 或者,您是否script在页面底部放置了一个小的标签,该标签只是调用执行该页面javascript代码的方法? 那么您不再需要require.js吗? 谢谢 编辑:我感谢所有的答案...,我认为他们并没有真正解决问题。其中一些是关于样式的,似乎没有关系...而其他人只是提到javascript_include_tag...,我知道确实存在(显然...),但是看来Rails 3.1的前进方向是包装所有内容。您的JavaScript分成1个文件,而不是在每个页面的底部加载单个JavaScript。 我能想到的最好的解决方案是div用ids或classes 将某些功能包装在标签中。在JavaScript代码中,您只需检查页面上的id或class,如果是,则运行与其关联的JavaScript代码。这样,如果动态元素不在页面上,则JavaScript代码不会运行-即使它已包含在application.jsSprockets打包的海量文件中。 我上面的解决方案的好处是,如果搜索框包含在100个页面中的8个页面中,它将仅在这8个页面上运行。您也不必在网站的8个页面中包含相同的代码。实际上,您再也不必在您的网站上再包含任何手动脚本标记。 我认为这是对我问题的实际答案。

14
如何在Ruby on Rails 3.1中禁用资产管道(链轮)消息的日志记录?
默认情况下,在Ruby on Rails 3.1(RC1)下,(dev)日志中的链轮往往很冗长: Started GET "/assets/application.css" for 127.0.0.1 at 2011-06-10 17:30:45 -0400 Compiled app/assets/stylesheets/application.css.scss (5ms) (pid 6303) Started GET "/assets/application.js" for 127.0.0.1 at 2011-06-10 17:30:45 -0400 Compiled app/assets/stylesheets/default.css.scss (15ms) (pid 6303) ... Started GET "/assets/default/header_bg.gif" for 127.0.0.1 at 2011-06-10 17:30:45 -0400 Served asset /default/header_logo.gif - 304 Not Modified (7ms) …

12
在Rails资产管道中使用字体
我在Scss文件中配置了一些字体,如下所示: @font-face { font-family: 'Icomoon'; src: asset-url('icoMoon.eot?#iefix', font) format('embedded-opentype'), asset-url('icoMoon.woff', font) format('woff'), asset-url('icoMoon.ttf', font) format('truetype'), asset-url('icoMoon.svg#Icomoon', font) format('svg'); } 实际的字体文件存储在/ app / assets / fonts /中 我已添加config.assets.paths << Rails.root.join("app", "assets", "fonts")到我的application.rb文件 并且编译的CSS源代码如下: @font-face { font-family: 'Icomoon'; src: url(/assets/icoMoon.eot?#iefix) format("embedded-opentype"), url(/assets/icoMoon.woff) format("woff"), url(/assets/icoMoon.ttf) format("truetype"), url(/assets/icoMoon.svg#Icomoon) format("svg"); } 但是,当我运行该应用程序时,找不到字体文件。日志: 在2012-06-05 23:21:17 +0100投放的资产/icoMoon.ttf-127.0.0.1开始获取“ …

14
rails 3.1.0 ActionView :: Template :: Error(未预编译application.css)
我用一个带有索引功能的简单页面控制器制作了一个基本的Rails应用程序,当我加载页面时,我得到了: ActionView::Template::Error (application.css isn't precompiled): 2: <html> 3: <head> 4: <title>Demo</title> 5: <%= stylesheet_link_tag "application" %> 6: <%= javascript_include_tag "application" %> 7: <%= csrf_meta_tags %> 8: </head> app/views/layouts/application.html.erb:5:in `_app_views_layouts_application_html_erb__43625033_88530400' 宝石文件 source 'http://rubygems.org' gem 'rails', '3.1.0' # Bundle edge Rails instead: # gem 'rails', :git => 'git://github.com/rails/rails.git' gem 'sqlite3' gem 'execjs' …

7
在Rails生产中config.assets.compile = true,为什么不呢?
已安装的默认Rails应用rails new已config.assets.compile = false在生产中。 通常的处理方式是rake assets:precompile在部署应用程序之前运行,以确保所有资产管道资产都已编译。 那么,如果我开始config.assets.compile = true生产该怎么办? 我precompile不再需要跑步了。我认为将会发生的是第一次请求资产时,将对其进行编译。这将是第一次降低性能(这意味着您通常需要在生产环境中使用js运行时才能做到)。但是除了这些缺点之外,在对资产进行延迟编译之后,我认为对该资产的所有后续访问都不会影响性能,该应用程序的性能将与在此初始首次命中的延迟编译之后的预编译资产完全相同。这是真的? 有什么我想念的吗?还有其他原因不适合config.assets.compile = true生产吗?如果我已经在生产环境中使用了JS运行时,并且愿意为资产的首次访问权衡性能下降的代价,而不必运行它precompile,这是否有意义?

3
使用Rails 3.1资产管道有条件地使用某些CSS
我正在使用Rails 3.1.rc5构建我的第一个单独的Rails应用程序。我的问题是我想让我的网站有条件地呈现各种CSS文件。我正在使用Blueprint CSS,并且试图在screen.css大多数情况下渲染链轮/轨道,print.css仅在打印ie.css时以及从Internet Explorer访问该网站时。 不幸的是,清单中的默认*= require_tree命令application.css包括assets/stylesheets目录中的所有内容,并导致令人不愉快的CSS混乱。我当前的解决方法是一种蛮力方法,其中我分别指定了所有内容: 在application.css中: *= require_self *= require home.css ... *= require blueprint/screen.css 在我的样式表中,部分(haml): <!--[if lt IE 9] <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> ![endif]--> = stylesheet_link_tag "application" = stylesheet_link_tag 'blueprint/print', media: 'print' <!--[if lt IE8]] = stylesheet_link_tag 'blueprint/ie' ![endif]--> = javascript_include_tag "application" 这有效,但不是特别漂亮。我已经花了几个小时进行搜索,才能达到目标,但是我希望有一种更简单的方法,而我只是错过了。如果我什至可以选择性地呈现某些目录(不包括子目录),那么整个过程将变得不那么严格。 谢谢!

9
没有路线符合[GET] /资产
我有一个Rails应用,正在尝试在生产环境中进行测试。我跑了RAILS_ENV=production rake assets:precompile,生成了我所有在/ public / assets中的资产。问题是当我启动我的应用程序时,RAILS_ENV=production rails s thin我得到: ActionController::RoutingError (No route matches [GET] "/assets/application-eff78fd67423795a7be3aa21512f0bd2.css"): 该文件确实存在,尽管位于/public/assets/application-eff78fd67423795a7be3aa21512f0bd2.css。 关于为什么我要这个有RoutingError什么想法吗?

24
无法解码下载的字体,OTS解析错误:无效的版本标记+ rails 4
我正在做资产的预编译,并在生产模式下运行该应用程序。编译后,当我加载索引页面时,我在chrome控制台中收到以下警告: Failed to decode downloaded font: http://localhost:3000/fonts/ionicons.ttf?v=2.0.0 prospects:1 OTS parsing error: invalid version tag Failed to decode downloaded font: http://localhost:3000/fonts/ionicons.woff?v=2.0.0 prospects:1 OTS parsing error: invalid version tag 问题是它没有加载图标,而不是显示正方形。 我们使用了自定义字体,代码为: @font-face { font-family: 'icomoon'; src: font-url('icomoon.eot'); src: font-url('icomoon.eot?#iefix') format('embedded-opentype'), font-url('icomoon.ttf') format('truetype'), font-url('icomoon.woff') format('woff'), font-url('icomoon.svg#icomoon') format('svg'); font-weight: normal; font-style: normal; } 我不知道我到底缺少什么。我进行了很多搜索并尝试了解决方案,但没有成功。

18
Rails 4:资产未在生产中加载
我正在尝试将我的应用程序投入生产,并且图像和CSS资产路径无效。 这是我目前正在做的事情: 图片资产位于/app/assets/images/image.jpg 样式表位于/app/assets/stylesheets/style.css中 在我的布局中,我这样引用css文件: <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %> 重新启动独角兽之前,我运行RAILS_ENV=production bundle exec rake assets:precompile并成功,并且在public/assets目录中看到了指纹文件。 浏览到我的网站时,出现的404 not found错误mysite.com/stylesheets/styles.css。 我究竟做错了什么? 更新: 在我的布局中,它看起来像这样: <%= stylesheet_link_tag "bootstrap.min", media: "all", "data-turbolinks-track" => true %> <%= stylesheet_link_tag "styles", media: "all", "data-turbolinks-track" => true %> <%= javascript_include_tag "application", "data-turbolinks-track" => true %> …

13
Windows上的ExecJS :: RuntimeError尝试遵循rubytutorial
更新: 科林的建议删除行// = require_tree。已解决此问题。 我已经浪费了超过2天的时间来尝试遵循所有建议并解决我的问题。我正在尝试在Windows机器上关注http://ruby.railstutorial.org一书,但我一生无法克服以下令人讨厌的错误。 ExecJS::RuntimeError in Static_pages#home Showing C:/Users/.../bootcamp-sample-app/app/views/layouts/application.html.erb where line #6 raised: ["ok","(function() {\n\n\n\n}).call(this);\n"] (in C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee) Extracted source (around line #6): 3: <head> 4: <title><%= full_title(yield(:title)) %></title> 5: <%= stylesheet_link_tag "application", media: "all" %> 6: <%= javascript_include_tag "application" %> 7: <%= csrf_meta_tags %> 8: <%= render 'layouts/shim' %> …

6
Rails 4的图像路径,图像URL和资产URL在SCSS文件中不再起作用
我们是否应该image-url在Rails 4中使用其他东西?它们返回似乎没有意义的不同值。如果我logo.png进入/app/assets/images/logo.png并执行以下操作,这就是我得到的: image-url("logo.png") -> url("/images/logo.png") #obviously doesn't work image-path("logo.png") -> "/images/logo.png" asset-url("logo.png") -> url("/logo.png") 当然,这些都不起作用,因为它们至少需要/assets在前面。 更新:实际上,我刚刚注意到,如何在Rails 4中访问图像?我有一张图片/app/assets/images/logo.png。但是,如果我访问以下任何URL,仍然看不到我的图像: http://localhost:3000/assets/logo.png http://localhost:3000/assets/images/logo.png http://localhost:3000/logo.png http://localhost:3000/images/logo.png 更新2:我可以启动我的唯一方法logo.png是将其移动到/app/assets/stylesheets目录,然后拉起: http://localhost:3000/assets/logo.png

3
为什么Rails4放弃对Gemfile中“资产”组的支持
在Rails 3中,将专门用于在资产管道中生成资产的gem正确放置在assetsGemfile组中: ... # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails' gem 'coffee-rails' gem 'uglifier' # See https://github.com/sstephenson/execjs#readme for more supported runtimes # gem 'therubyracer', :platforms => :ruby end 现在,根据(仍在进行中的)升级文档: Rails 4.0从Gemfile中删除了资产组。升级时,您需要从Gemfile中删除该行。 当然,使用RC1进行新项目会产生一个Gemfile,其中默认包含任何组以外的资产相关的gem: source 'https://rubygems.org' # Bundle edge …

5
Rails中正确的SCSS资产结构
所以,我有一个app/assets/stylesheets/目录结构,看起来像这样: |-dialogs |-mixins |---buttons |---gradients |---vendor_support |---widgets |-pages |-structure |-ui_elements 在每个目录中,有多个sass部分(通常是* .css.scss,但是一个或两个* .css.scss.erb)。 我可能有很多假设,但是rails应该由于*= require_tree .application.css中的内容而自动编译那些目录中的所有文件,对吗? 我最近尝试通过删除所有颜色变量并将它们放在根app/assets/stylesheets文件夹(_colors.css.scss)中的文件中来重组这些文件。然后,我在根app/assets/stylesheets文件夹中创建了一个名为master.css.scss的文件,如下所示: // Color Palette @import "colors"; // Mixins @import "mixins/buttons/standard_button"; @import "mixins/gradients/table_header_fade"; @import "mixins/vendor_support/rounded_corners"; @import "mixins/vendor_support/rounded_corners_top"; @import "mixins/vendor_support/box_shadow"; @import "mixins/vendor_support/opacity"; 我不太了解Rails如何处理资产编译的顺序,但是显然这对我不利。似乎没有文件意识到要导入任何变量或mixins,因此会引发错误,因此我无法编译。 Undefined variable: "$dialog_divider_color". (in /home/blah/app/assets/stylesheets/dialogs/dialog.css.scss.erb) Undefined mixin 'rounded_corners'. (in /home/blah/app/assets/stylesheets/widgets.css.scss) 该变量$dialog_divider_color在_colors.css.scss中明确定义,并且_master.css.scss正在导入颜色和所有我的mixins。但是显然,rails没有得到该备忘录。 有什么办法可以解决这些错误,还是需要将所有变量定义以及所有mixin导入放回到每个文件中? 不幸的是,这个家伙似乎并不认为有可能,但我希望他错了。任何想法都将不胜感激。

6
在Rails 3.1中添加新的资产路径
有谁知道如何在Rails 3.1中向资产管道添加另一个文件夹? 我想以app/assets/fonts同样的方式app/assets/images服务。 更新:2013年5月7日 只是为了向以后发现此问题的人们提供一些说明,以便在application.rb文件中显式添加资产路径: config.assets.paths << "#{Rails.root}/app/assets/fonts" 但是,由于上面的路径是在下面,因此app/assets您不必显式添加它,您只需要重新启动Rails应用程序即可,Sprockets可以选择它。 你必须明确地添加是外面的路径app/assets,lib/assets或者vendor/assets,只是记得,虽然链轮在存在时,你的应用程序中加载,在我的经验,它不拿起资产路径新的文件夹不夹拿起新文件重新启动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.