标签: asset-pipeline

Rails 3.1 with Asset Pipeline,link_to:确认消息显示两次?

好的,所以我看到这个问题是由jQuery或Prototype的多个链接引起的,但我可以确认我只在整个页面链接到jQuery 一次.我的问题是:当我link_to确认删除时,弹出窗口显示两次.这是我模板中的适用代码(用Slim编写):

link_to('Destroy', depot_path(@depot.id), :confirm => "Really?", :method => :delete)
Run Code Online (Sandbox Code Playgroud)

我运行的Rails 3.1.0与资产管道打开,用gem 'jquery-rails'在我Gemfile,下面是我的application.js文件(这是由链轮的资产管道编译).

//= require jquery
//= require jquery_ujs
//= require 'underscore'
//= require 'backbone' 
Run Code Online (Sandbox Code Playgroud)

underscore.jsbackbone.js我的/vendor/assets/javascripts/目录中,链轮似乎找到了那些没关系.我还搜索了application.jssprockets提供的文件,jQuery只在那里一次,而jQuery UJS只在那里一次.当我的页面呈现时,这就是我的头部样子(我省略了csrf-token显示的值,FWIW).

<head>
  <meta content="text/html; charset=utf-8" http-equiv="content-type">
  <title>Administration</title>
  <link href="/assets/screen.css" media="screen" rel="stylesheet" type="text/css" />
  <script src="/assets/application.js" type="text/javascript"></script>
  <meta content="authenticity_token" name="csrf-param" />
  <meta content="--token--omitted--" name="csrf-token" />
  <script src="/assets/common/subdata.js" type="text/javascript"></script>
  <link href="/assets/show.css" media="screen" rel="stylesheet" …
Run Code Online (Sandbox Code Playgroud)

jquery ruby-on-rails ruby-on-rails-3.1 sprockets asset-pipeline

16
推荐指数
1
解决办法
3898
查看次数

如何加速资产编译测试?

使用Spin运行Guard可以很好地保持我的测试速度,除非资产是相关的并且需要编译.似乎每当我更改其中的某些内容时,测试环境都会重新编译所有资产.我已经看到了部署脚本的示例,这些脚本只重新编译源已更改的资产.这可以用于测试吗?或者是否有另一种加速测试资产编译的方法?

我正在使用一个相当具体的设置,所以我很乐意在需要时提供更多信息,但我觉得这个问题的答案可能会在更多的情况下使用,而不仅仅是我的.

rspec ruby-on-rails guard asset-pipeline

16
推荐指数
1
解决办法
2100
查看次数

在开发中禁用Sprockets资产缓存

我正在使用Rails 3.2.13和Rails Asset Pipeline.我想使用资产管道,所以我可以使用SASS和CoffeeScript和ERB作为我的资产,并让Pipeline自动编译它们,所以我不能在开发中关闭管道.我不是在开发中预编译资产,甚至没有public/assets/目录.

但是,当我对包含文件进行更改时,例如对_partial.html.erb文件中包含(呈现)的layout.html.erb文件进行更改,而不更改执行包含本身的文件(在此示例中layout.html.erb),Sprockets不检测更改并使其无效缓存,所以我不断得到相同的陈旧文件.当我在积极开发中执行此操作时,我想禁用任何资产缓存,以便我可以对每个请求进行更改,但我无法弄清楚如何执行此操作.我在我的设置中设置了以下所有内容development.rb:

config.action_controller.perform_caching = false
config.action_dispatch.rack_cache =  nil
config.middleware.delete Rack::Cache
config.assets.debug = true
config.assets.compress = false
config.cache_classes = false
Run Code Online (Sandbox Code Playgroud)

尽管如此,即使这样,文件也会显示在下面tmp/cache/assets/,tmp/cache/sass/并且未来的请求也无法进行更改.现在我每次想要看到更改时都必须手动删除这些目录.

不幸的是,资产管道RoR指南的How Caching Works部分的全部内容是:

Sprockets使用默认的Rails缓存存储来缓存开发和生产中的资产.

TODO:添加有关更改默认商店的更多信息.

那么,我如何让Sprockets按需编译资产但不缓存结果呢?

ruby rack ruby-on-rails sprockets asset-pipeline

16
推荐指数
1
解决办法
1万
查看次数

将sass-rails gem升级到5.0会给出弃用警告

我们升级到sass-rails版本5.0.0并获得此弃用警告:

DEPRECATION WARNING: Extra .css in SCSS file is unnecessary. Rename /Users/foo/Projects/foo/app/assets/stylesheets/foo.css.scss to /Users/foo/Projects/foo/app/assets/stylesheets/foo.scss. (called from _app_views_layouts_application_html_erb__1560597815210891605_70190441246060 at /Users/foo/Projects/foo/app/views/layouts/application.html.erb:13)
Run Code Online (Sandbox Code Playgroud)

有谁知道这是怎么回事?gem是否真的希望我重命名我的所有样式表资源:

app/assets/stylesheets/foo.css.scss
Run Code Online (Sandbox Code Playgroud)

至:

app/assets/stylesheets/foo.scss
Run Code Online (Sandbox Code Playgroud)

似乎与我一起反对多年的Rails惯例.也许有办法抑制弃用警告?

ruby-on-rails sass asset-pipeline

16
推荐指数
2
解决办法
3180
查看次数

Rails资产最佳实践

我是Rails的新手,无法找出组织资产的最佳方法.这个问题的目的是收集我的想法,征求意见,并随着时间的推移进化文档 - 也许有一天它可能是一个Rails指南.(Rails Wiki似乎已经死了.)这将作为新手概念化的辅助,而不是参考,因此它将仅限于最常见的场景.


资产管道 - 概述

有关管道的目的,好处和内部工作方式的详细信息,请从本指南开始:http://guides.rubyonrails.org/asset_pipeline.html 我将仅在此总结与我的目的相关的位.

管道必要的原因是:

  1. 编译:将高级语言(ERb,Haml,Sass,LESS,CoffeeScript ...)编译成纯CSS/JS.

管道的额外好处是:

  1. 连接:将多个文件合并为一个以提高客户端性能.
  2. 缩小:删除空格和其他巧妙的优化以减小文件大小.
  3. 指纹识别:在文件名中添加了文件内容的MD5哈希,以强制缓存在更改时再次获取文件.

资产管道 - 默认文件系统布局

  • app|lib|vender/assets/ - 用于将由管道处理的文件.
  • app/assets/ - 专门针对您为应用程序创建的文件.
  • lib/assets/ - 专门针对您为跨多个应用程序共享而创建的文件.
  • vendor/assets/ - 专门用于其他人创建的文件,例如jQuery和Twitter Bootstrap(虽然它们经常由gem提供,而不是直接导入/ vender).
  • public/ - 此处的文件保留原样,可直接从您的Web应用程序的根路径('/')获取.

资产管道 - 默认文件和行为

应用程序/资产/ JavaScript的/ application.js中

//= require jquery
//= require jquery_ujs
//= require_tree .
Run Code Online (Sandbox Code Playgroud)

应用程序/资产/样式表/ application.css

/*
 *= require_self
 *= require_tree .
 */
Run Code Online (Sandbox Code Playgroud)

public/404.html
public/robots.txt
...

的Gemfile

...
gem 'jquery-rails'
...
Run Code Online (Sandbox Code Playgroud)

以下是资产管道编译器使用新Rails应用程序的默认设置执行的操作:

  1. 编译器,默认情况下,将处理application.js,application.css …

ruby-on-rails sprockets asset-pipeline

15
推荐指数
0
解决办法
2148
查看次数

如何在Rails 3模型中访问image_path路由助手?

我正在尝试从Rails 3模型中使用Sprockets的image_path方法.我已经尝试ActionView::Helpers::AssetTagHelper在我的模型中包含并调用image_path,但这不起作用(undefined local variable or method 'config').

有任何想法吗?

更新 - 这对我有用:

ActionController::Base.new.view_context.asset_path("image.png")
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-3 sprockets asset-pipeline ruby-on-rails-3.2

15
推荐指数
1
解决办法
6318
查看次数

为什么我的Rails资产会被预编译两次?

我注意到我的资产似乎被编译了两次,这大大减慢了我的部署,因为这一步是最耗时的部分:

~/projects/rewportal(mapwidget ?) rake assets:precompile
/home/ruy/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /home/ruy/.rvm/gems/ruby-1.9.3-p194@rewportal/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb
AssetSync: using /home/ruy/projects/rewportal/config/initializers/asset_sync.rb
AssetSync: Syncing.
Using: Directory Search of /home/ruy/projects/rewportal/public/assets
Uploading: assets/application-5170f52c1dd49cb382d5135bee01d75e.js
[...]
Fetching files to flag for delete
Flagging 8 file(s) for deletion
Deleting: assets/active_admin-4ce46d089d4b0080e87c9abcb6fa6c97.css
[...]
AssetSync: Done.
Run Code Online (Sandbox Code Playgroud)

这是正常的吗?

当我预编译到其他环境(非生产)时,我可以看到每个资产的详细编译两次:

~/projects/rewportal(mapwidget ?) rake RAILS_ENV=qa assets:precompile --trace
** Invoke assets:precompile (first_time)
** Execute assets:precompile
/home/ruy/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /home/ruy/.rvm/gems/ruby-1.9.3-p194@rewportal/bin/rake assets:precompile:all RAILS_ENV=qa RAILS_GROUPS=assets --trace
** Invoke assets:precompile:all (first_time)
** Execute assets:precompile:all
** Invoke assets:precompile:primary (first_time)
** Invoke assets:environment (first_time)
** Execute …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails asset-pipeline activeadmin

15
推荐指数
2
解决办法
2530
查看次数

Rails 4 + bootstrap设置资产

我想设置引导Rails4使用bootstrap-sass和我得到这个著名的错误:

Sprockets::FileNotFound - couldn't find file 'bootstrap'
  (in app/assets/javascripts/application.js:16):
Run Code Online (Sandbox Code Playgroud)

我试过以下:

  1. twitter/bootstrapapplication.js
  2. gem 'bootstrap-sass', '~> 3.1.0' 是集团外资产
  3. 还尝试了一些互联网上的其他东西

我花了很多时间从其他帖子中提出不同的建议.我如何系统地调试这个,如何设置bootstrap-sass?

ps: 也试图twitter-bootstrap-rails没有运气.

这是一些文件

的application.js

//= require jquery
//= require jquery_ujs
//= require js-routes
//= require bootstrap
//= require_tree .
//= require bootstrap-slider
Run Code Online (Sandbox Code Playgroud)

application.css.scss

 *= require jquery.ui.core
 *= require jquery.ui.theme
 *= require_self
 *= require bootstrap-slider
 *= require_tree .
 *= stub active_admin
*/

@import "bootstrap";
Run Code Online (Sandbox Code Playgroud)

的Gemfile

source 'https://rubygems.org'
ruby '2.0.0'
gem 'rails', '4.0.0' …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails asset-pipeline twitter-bootstrap bootstrap-sass ruby-on-rails-4

15
推荐指数
1
解决办法
2万
查看次数

分析开发中的缓慢资产

每次我在开发过程中对我的SASS进行更改时,加载我的时间都会增加20秒+加载时间application.css.

我已经阅读了其他一些问题,并尝试过:

  • 设定config.assets.debug = false.
  • 改变进口和要求(我使用SASS变量)
  • 使用Miniprof及其火图
  • 使用rails-asset_profile

这是我读到的:

我一直在从Rails 3.2和现在的4.2中遇到这个问题.

我在这里疯了.我如何找到这个烂摊子的瓶颈?

我正在寻找一种解决方案,可以让我精确地确定花费时间的地方,并提出减少编译时间的方法.

ruby-on-rails sass asset-pipeline

15
推荐指数
1
解决办法
916
查看次数

Rails 4 - 在生产服务器上资源预编译之后没有manifest.json

这是Rails 4.2应用程序的app/assets /.

在此输入图像描述

有3个bootstraps js和css文件.部署到生产(ubuntu 12.1)后,资产预编译在服务器上完成(部署在suburi下):

RAILS_ENV=production bundle exec rake assets:precompile RAILS_RELATIVE_URL_ROOT=/mysuburi
Run Code Online (Sandbox Code Playgroud)

这是production.rb:

  config.cache_classes = true
  config.eager_load = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.serve_static_files = false #ENV['RAILS_SERVE_STATIC_FILES'].present?
  config.assets.compress = true
  config.assets.js_compressor = :uglifier
  config.assets.compile = false
  config.assets.digest = true
  config.log_level = :debug
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
  config.log_formatter = ::Logger::Formatter.new
  config.active_record.dump_schema_after_migration = false
Run Code Online (Sandbox Code Playgroud)

以下是负责人application.css.scss:

@import "bootstrap.min.css";
@import "bootstrap-theme.min.css";

@import "simple_form.css.scss";
@import "user_menus.css.scss";
Run Code Online (Sandbox Code Playgroud)

application.js,它有:

//= require bootstrap.min
Run Code Online (Sandbox Code Playgroud)

以下是lspublic/assets/on production服务器的输出:

application-05cf37813d76c2bd659271403789374cc118f1a4e616ec220969577b79ff6514.css …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails precompile asset-pipeline ruby-on-rails-4

15
推荐指数
2
解决办法
3500
查看次数