标签: asset-pipeline

如何防止Rails 3.1将静态资产缓存到Rails.cache?

我在我的Rails 3.1应用程序上使用CloudFlare CDN.Cloudflare是一个在DNS级别工作的CDN.在第一次打到静态资产时,CloudFlare会从您的应用程序加载它,然后将其缓存在CDN中.从CDN而不是您的应用程序加载该资产的未来请求.

我遇到的问题是,如果将控制器缓存设置为true:

config.action_controller.perform_caching = true
Run Code Online (Sandbox Code Playgroud)

它启用了Rack :: Cache中间件.由于Rails为静态资产设置了默认缓存控制设置,因此这些资产将写入Rails.cache存储.结果,我的缓存存储(在我的情况下是redis)被填充了静态资产,其中url作为哈希键.

遗憾的是,我无法关闭静态资产缓存控制标头,而不会影响Cloudflare和我的用户的浏览器如何缓存资产.我无法关闭控制器缓存或丢失页面/操作/片段缓存.如果删除Rack :: Cache中间件,结果相同.

有没有人有任何其他想法?

更新:我在这里打开了GitHub的门票.

caching ruby-on-rails ruby-on-rails-3.1 asset-pipeline cloudflare

19
推荐指数
2
解决办法
5973
查看次数

Rails 3.1资产管道没有获取@ import'd工作表的更改

我使用@import'部分表来组织我的css/sass:

/app
  /assets
    /stylesheets
      _constants.sass
      _layout.sass
      ...
      app.css.sass

app.css.sass:
  @import _constants.sass
  // basic styles
  @import _layout.sass
  @import ...
Run Code Online (Sandbox Code Playgroud)

app.css.sass有一个@import规则_layout.sass,允许我在原始sass文件被压缩之前共享mixins和变量app.css

问题是Rails无法识别@import'd partials(_layout.sass)app.css的更改,并且在我对实际app.css.sass文件本身进行更改之前不会重新生成.这大大减慢了我的工作流程,意味着我必须添加/删除空行app.css.sass以查看更改.3.0中从未遇到过这个问题.

有没有办法迫使sass资产在开发中的每个服务器请求上重新生成?

import sass ruby-on-rails-3.1 asset-pipeline

19
推荐指数
1
解决办法
4850
查看次数

删除资产预编译上的console.log

在资产期间:预编译javascript被缩小,但是console.logs被保留.

有什么方法可以在代码推送到生产时删除预编译上的所有console.logs?

ruby-on-rails ruby-on-rails-3 asset-pipeline

19
推荐指数
2
解决办法
2919
查看次数

rake assets:预编译未定义的方法`[]'为nil:NilClass

我正在尝试启动并运行新的生产服务器,它非常接近.当我执行

RAILS_ENV=production rake assets:precompile
Run Code Online (Sandbox Code Playgroud)

返回此错误

undefined method `[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

当我使用--trace运行它时,会重新调整

$RAILS_ENV=production rake assets:precompile --trace
** Invoke assets:precompile (first_time)
** Execute assets:precompile
rake aborted!
undefined method `[]' for nil:NilClass
  (in /home/deploy/pm/app/assets/stylesheets/jquery-ui-1.8.16.custom.css.scss)

Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)

我感谢任何人都可以提供任何帮助,想法等.

这是Gemfile和包列表

source 'http://rubygems.org'

gem 'cancan'
gem 'client_side_validations'
gem 'devise', '~> 1.5.3'
gem 'execjs'
gem 'haml'
gem 'httparty'
gem 'jquery-rails'
gem 'mysql2'
gem 'paperclip', "~> 2.4"
gem 'rails', '3.1.0'
gem 'rails3-jquery-autocomplete'
gem 'rake', '0.9.2'
gem 'remotipart', "~> …
Run Code Online (Sandbox Code Playgroud)

rake ruby-on-rails-3 asset-pipeline

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

有没有办法在清单文件中的require_tree中添加一个例外?

有没有办法可以将目录中的所有文件包括在一个目录中,除了一个目录以外的所有目录?所以类似于:

require_tree . :except 'this_one'
Run Code Online (Sandbox Code Playgroud)

只是想知道并且无法弄清楚文档在清单文件中的"require_tree"方法的位置.

ruby-on-rails asset-pipeline

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

在rails 4中将新文件夹添加到资产路径

我想创建一个新文件夹app/assets,在这个文件夹中我有一些文件,每个文件都有css文件夹和javascript文件夹,如下面给出的地址:

app/assets/plugins/bootstrap/css/bootstrap.min.css app/assets/plugins/bootstrap/js/bootstrap.min.js

我使用下面的代码来定义css文件,但不是true,rails无法找到并加载bootstrap.min.css:

<%= stylesheet_link_tag "bootstrap.min", media: "all", "data-turbolinks-track" => true %>

<%= stylesheet_link_tag "../plugins/bootstrap/css/bootstrap.min", media: "all", "data-turbolinks-track" => true %>
Run Code Online (Sandbox Code Playgroud)

我怎样才能申报css,并javascriptplugin文件夹?

注意:当我想css通过此地址在浏览器中查看文件时:

http://localhost:3000/assets/plugins/bootstrap/css/bootstrap.min.css
Run Code Online (Sandbox Code Playgroud)

我得到以下错误: No route matches [GET] "/assets/plugins/bootstrap/css/bootstrap.min.css"

但是对于存在的css文件assets/stylesheets/我可以在浏览器中通过输入地址看顶部的css文件.为什么不同的beetwin stylesheetsplugins目录?

asset-pipeline ruby-on-rails-4

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

带有第三方库的Grails Asset-Pipeline系统

Grails 2.4现在使用Asset Pipeline来管理和处理Grails应用程序中的静态资产,而不是资源系统.这是相当新的,在互联网上没有太多关于它的文档.

我的问题是,如何正确处理第三方库?

例如,select2(http://ivaynberg.github.io/select2/)库在其单个平面文件夹中附带所有.css,.js,图像文件.

我应该在复制不同的文件类型及其相应的assets/javascripts/,assets/stylesheets/等子文件夹?如何处理那些没有像.json,text或doc文件这样明显位置的文件?

我应该创建一个vendors/select2/文件夹吗?在哪里,assets/在里面web-app/?然后,我应该如何从我的GSP加载所有必要的文件?

此lib也只在表单视图中需要,因此除非需要,否则不应加载.

grails assets asset-pipeline

19
推荐指数
1
解决办法
5345
查看次数

通过Assets Pipeline,Rails 3.1 rc1携带Sass变量

我最近使用3.1 rc1分支了我的一个Rails 3.0项目来尝试新的资产管道.在进入3.1之前我一直在项目中使用Sass所以我在一个单独的配置文件中设置了一些变量和函数,让我所有的其他sass文件在第一行导入一个文件.

这样做非常好,不会在样式表中重复一些颜色代码和一般几何体.问题是现在新的Assets Pipeline是我所理解的,它将".css.sass"文件转换为原始css,然后将其附加到其余代码.

所以,如果我在"application.css"中指定:

/*
 *= require ./configure
 *= require ./what_ever_other_files_i_want_to_import
*/
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

Sass::SyntaxError
    Undefined variable: "$interactive".
Run Code Online (Sandbox Code Playgroud)

当我尝试从以下位置访问该文件时: http://localhost:3000/assets/application.css

有任何想法吗?

variables ruby-on-rails sass ruby-on-rails-3.1 asset-pipeline

18
推荐指数
1
解决办法
4453
查看次数

是否可以使用Rails Asset Pipeline强制生成资产?

在使用Rails 3.1 Asset Pipeline时,有没有办法强制每次请求重新生成资产?

当使用带有一系列partials和mixin文件的Less(less-rails)时,我在让系统获取文件更改时遇到问题.如果我可以强制系统在每个请求上生成,那么我的工作效率会更高.

ruby-on-rails less ruby-on-rails-3.1 asset-pipeline

18
推荐指数
3
解决办法
8039
查看次数

为什么Rails不会找到我的资产?

在生产模式下,rails似乎无法从资产管道中找到任何预编译资产.

我在CentOS上使用RVM运行的rails 3.2.0和ruby 1.9.3.没有其他Web服务器与此应用程序一起运行.该应用程序最近才更新为使用资产管道,因为它最初是一个rails 3.0应用程序.

跑完之后

rake assets:clean
rake assets:precompile
Run Code Online (Sandbox Code Playgroud)

正如我所料,我看到公共/资产中的哈希内容.文件末尾的哈希值与我在页面源中看到的哈希值相匹配.

但是在运行时,这是我看到Rails尝试提供的每个资产的内容:

Started GET "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" for 75.149.58.169 at 2012-03-14 11:42:43 -0700

ActionController::RoutingError (No route matches [GET] "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"):
Run Code Online (Sandbox Code Playgroud)

我不是指每个资产所在的文件夹; 所有对资产的引用都是这样的:

//css:
.class {
  background: url(asset.png) no-repeat;
}

//erb:
<%= image_tag "asset.png" %>
<%= link_to "page", :class => "class" %>
Run Code Online (Sandbox Code Playgroud)

production.rb中的资产管道相关设置:

config.serve_static_assets = false
config.assets.enabled = true
config.assets.compress = true
config.assets.debug = false
config.assets.compile = false
config.assets.digest = true
Run Code Online (Sandbox Code Playgroud)

最后,来自config/application.rb的资产设置:

config.assets.enabled = true
config.assets.version = '1.0'
Run Code Online (Sandbox Code Playgroud)

启动rails服务器进程的用户对公共/资产具有读,写和执行权限,因此我认为这不是权限问题.我错过了配置步骤吗?

编辑

我注意到没有错误声明资产没有预编译,因此我尝试通过在主机路径的末尾附加"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"来从网页访问样式表:

http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"
Run Code Online (Sandbox Code Playgroud)

这工作,样式表打开.

asset-pipeline ruby-on-rails-3.2

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