标签: asset-pipeline

Rails 3.1 - 如何在普通应用程序和active_admin gem之间分离CSS/JS

我的应用程序部署在Rails 3.1和Heroku上.

1.在production.rb中,如果我config.assets.compile = true只有active_admin工作.但是,在生产中,我希望config.assets.compile = false用于普通的应用程序CSS和JS.活动管理模块将仅由管理员使用,因此速度很慢.

2.此外,因为我安装active_admin宝石我正常的CSS得到了非常不安.

因此,我想以某种方式拆分active_admin和普通应用程序的CSS和JS,以便:

1.只有当我点击localhost:3000/adminCSS和JS的活动管理员点击和普通的应用程序没有.当我在任何其他URL时,正常应用程序的CSS和JS命中,但活动管理员没有.

2.我可以config.assets.compile = false正常使用应用程序CSS和JS,同时单独使用active_admin为config.assets.compile = true.

这可能吗?

ruby-on-rails-3.1 asset-pipeline

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

在Apache上使用Rails 3.1时,PageSpeed在使用Asset Pipeline apache配置时说"指定缓存验证器"

我发现Rails 3.1指南建议与Google PageSpeed管理缓存资产的建议之间存在冲突.

导轨3.1导游资产管道提供一个解决方案Apache服务器的配置这里

apache配置的重要部分是:

<LocationMatch "^/assets/.*$">
  # Some browsers still send conditional-GET requests if there's a
  # Last-Modified header or an ETag header even if they haven't
  # reached the expiry date sent in the Expires header.
  Header unset Last-Modified
  Header unset ETag
  FileETag None
  # RFC says only cache for 1 year
  ExpiresActive On
  ExpiresDefault "access plus 1 year"
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)

一切正常,但是当我运行谷歌的PageSpeed,它抱怨说我应该"指定缓存验证"设置要么Last-Modified或者ETag,列出所有的资产文件夹中的文件.

评论Header unset Last-Modified满足PageSpeed.

我对各种页面加载进行了快速测试,至少在Chrome中,它似乎没有什么区别 - 资产是以任何方式缓存的.

有谁知道哪个合适?

apache ruby-on-rails ruby-on-rails-3.1 asset-pipeline

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

选择性Rails 3.2每个文件的资产管道压缩

我想有选择地压缩Rails 3.2应用程序中的一些javascript文件,但仍然在生产环境中从单个捆绑文件提供所有js资产.

像这样的语法,在app/assets/javascripts/application.js文件中,使用传递给最后3个sprockets 指令的make -up :compress => false选项,require我希望解释我想要实现的目标.

// Contents of app/assets/javascripts/application.js
//
//= require jquery
//= require jquery_ujs
//= require angular-1.0.1/angular, :compress => false
//= require angular-1.0.1/angular-resource, :compress => false
//= require products, :compress => false
Run Code Online (Sandbox Code Playgroud)

因此jquery.js和jquery_ujs.js文件将被压缩(通过Rails资产编译,默认使用UglifierJS),其余3个文件将不会被压缩,但它们将被捆绑到application.js包中.

有没有办法做到这一点?

其动机是products.js文件包含一个angularjs控制器,该控制器使用angular的依赖注入,这需要特定的变量名称,例如$scope并且$http不会被更改.

javascript ruby-on-rails asset-pipeline angularjs

3
推荐指数
2
解决办法
2572
查看次数

Rails会忽略ActionView :: Template :: Error丢失资产

ActionView::Template::Error (leagues/lal11.png isn't precompiled):
Run Code Online (Sandbox Code Playgroud)

添加新联赛后,我的应用中会发生此类错误,但尚未预编译对应的图像。

我了解为什么会这样;资产清单缺少相关路径,因此Rails无法为其确定摘要。但是,由于缺少简单的映像而杀死整个应用程序是愚蠢的。有没有办法捕获这个特定的异常?

ruby-on-rails asset-pipeline

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

为什么在Heroku slug编译期间没有编译这个新的CSS清单文件,而正常的应用程序清单工作正常?

我在Heroku Cedar堆栈上运行了Rails 3.2.11.我不编译资产在本地,他们所描述的自动塞在编译过程中编译,在这里.app/assets/stylesheets/new_manifest.css.scss除了默认设置,我刚刚创建了一个新的CSS清单文件application.css.scss.当我推送到Heroku时,这个清单文件没有被编译application.css.scss为.新的清单文件在开发中工作正常.为什么会这样?

application.rb中

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

production.rb

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

Heroku推出的控制台输出

-----> Preparing app for Rails asset pipeline
       Running: rake assets:precompile
       Asset precompilation completed (83.62s)
Run Code Online (Sandbox Code Playgroud)

样本页面

<%= stylesheet_link_tag "new_manifest", media: "all" %>
Run Code Online (Sandbox Code Playgroud)

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

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

服务资产的发展非常缓慢

我有一个标准的rails 3 webapp与默认资产管道.突然之间,资产需要很长时间才能加载(我的页面加载时间大约为1-2秒到1分钟).服务器响应时间(/ home)是正常的,但是一些.css和.js文件等待很长时间(最多45秒).即采取这种只有少数资产,长期是指那些由宝石提供(例如:modernizr-rails/vendor/assets/javascripts/modernizr.js)

例如,对于modernizr.js?body=1:

头:

Request URL:http://dev.sharewizz.com:3000/assets/modernizr.js?body=1
Request Method:GET
Status Code:304 Not Modified
Run Code Online (Sandbox Code Playgroud)

统计:

DNS Lookup  5.00?s
Connecting  20.07?s
Sending     0
Waiting     10?ms
Receiving   3?ms
Run Code Online (Sandbox Code Playgroud)

它是链轮的问题吗?我怎么知道什么是错的?

注意:所有其他浏览器的行为相同. 编辑:实际上问题只有chrome,甚至没有safari.我试图在端口3000和端口80上使用rails s启动我的服务器(没有更改)

如果我访问http://localhost:3000/assets/modernizr.js?body=1,大多数时候它是即时的,有时它会等待很长时间.

assets google-chrome ruby-on-rails-3 sprockets asset-pipeline

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

assets:预编译到达文件的末尾

我试图assets:precompile在我的Rails 4应用程序上运行,但我一直在:

rake aborted!
end of file reached
Run Code Online (Sandbox Code Playgroud)

在capistrano抱怨同样的错误后,我在我的VPS上运行此命令.有任何想法吗?

[deploy@skateboxes skateboxes]$ cd /var/www/skateboxes/releases/20131024204508 && ( RAILS_ENV=production /usr/local/rvm/bin/skateboxes_rake assets:precompile )
rake aborted!
end of file reached
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/activesupport-4.0.0/lib/active_support/core_ext/marshal.rb:6:in `load'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/activesupport-4.0.0/lib/active_support/core_ext/marshal.rb:6:in `load_with_autoloading'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/cache/file_store.rb:19:in `block in []'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/cache/file_store.rb:19:in `open'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/cache/file_store.rb:19:in `open'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/cache/file_store.rb:19:in `[]'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/caching.rb:14:in `cache_get'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/caching.rb:84:in `cache_get_hash'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/caching.rb:54:in `cache_asset'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/index.rb:93:in `build_asset'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/base.rb:287:in `find_asset'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/index.rb:61:in `find_asset'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:211:in `block in find_asset'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:257:in `benchmark'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:210:in `find_asset'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:119:in `block in compile'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:118:in `each'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/sprockets/manifest.rb:118:in `compile'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-rails-2.0.1/lib/sprockets/rails/task.rb:60:in `block (3 levels) in define'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-2.10.0/lib/rake/sprocketstask.rb:146:in `with_logger'
/var/www/skateboxes/shared/bundle/ruby/2.0.0/gems/sprockets-rails-2.0.1/lib/sprockets/rails/task.rb:59:in `block (2 …
Run Code Online (Sandbox Code Playgroud)

ruby capistrano ruby-on-rails asset-pipeline

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

预编译SCSS:变量未定义(Rails 4)

场景

/products.css.scss中:

@import 'partials/colors';
@import 'partials/boxes';

#wrapper {}
Run Code Online (Sandbox Code Playgroud)

/partials/_colors.css.scss中:

$light-gray: #ccc;
Run Code Online (Sandbox Code Playgroud)

/partials/_boxes.css.scss中:

#box-light-gray {
  background-color: $light-gray;
  width: 50px;
  height: 50px;
}
Run Code Online (Sandbox Code Playgroud)

问题

它发生rake assets:precompileproduction环境中:

Sass :: SyntaxError:未定义的变量:"$ light-grey".(在/partials/_boxes.css.scss:2)

我的想法

文件/partials/_boxes.css.scss本身没有变量$light-gray- 在这里我必须同意rake assets:precompile.问题的关键是:我怎么做才能让rake认识的注入$light-gray/partials/_boxes.css.scss

我认为rake不符合拼图的要点,因为它不知道SCSS是如何工作的.我觉得我错过了与SCSS相关的东西rake.

ruby-on-rails asset-pipeline

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

为什么这个JS会在一页上部分呈现而不是另一页?

我有一个posts.js看起来像这样的文件:

var ready;
ready = function() {

    var toggleSidebar = $(".togglesidebar");
    var primary = $("#primary");
    var secondary = $("#secondary");

    toggleSidebar.on("click", function(){

        if(primary.hasClass("col-sm-9")){
            primary.removeClass("col-sm-9");
            primary.addClass("col-sm-12");
            secondary.css('display', 'none');
        }
        else {
            primary.removeClass("col-sm-12");
            primary.addClass("col-sm-9");
            secondary.css('display', 'inline-block');
        }
    }); 
};

var counter = function(event) {
    var fieldValue = $(this).val();
    var wc = fieldValue.trim().replace(regex, ' ').split(' ').length;
    var regex = /\s+/gi;
    var $wcField;
    var maxWc;

    if ($(this)[0] === $('#post_title')[0]) {
      $wcField = $('#wordCountTitle');
      maxWc = 7;
    } else {
      $wcField = $('#wordCountBody');
      maxWc …
Run Code Online (Sandbox Code Playgroud)

javascript jquery ruby-on-rails asset-pipeline ruby-on-rails-4

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

rails应用程序中的静态图像资产未在Heroku生产中显示

我尝试在部署之前使用以下命令预编译我的图像:

$ RAILS_ENV=production bin/rake assets:precompile

我正在使用image_tag我的模板,在开发中工作.

更新:config.serve_static_files据说在dev中默认为true,但之后在生产中关闭,因为资产应该通过您的Web服务器提供.我目前只是在heroku上使用免费套牌而且仍在运行webrick,所以我将此设置为true,但没有运气.

更新2:当我设置config.serve_static_filesfalse,heroku没有看到我的任何资产时,我的所有样式都消失了,图像仍然没有.虽然heroku确实发送了一条警告消息,告诉大师说所有" config.serve_static_files确实能够提供服务公共文件夹中的所有内容,并且与资产管道无关." 我认为它与资产管道无关,因为它只是提供公共文件夹中的资产而不查看我们的资产目录.我也看到heroku在部署时运行预编译命令,所以我不需要每次都这样做.

这让我想知道我使用它调用我的资产的方式image_tag是否可能是问题,但我不确定为什么会这样?

更新3:资产管道的rails指南说:"在常规视图中,您可以访问public/assets/images目录中的图像,如下所示:<%= image_tag "rails.png" %>.我正在使用此约定调用我的图像<%= image_tag("lab49", size: "80x30") %>,但图像仍然不会出现.

更新4:看到我的回答.

ruby ruby-on-rails heroku asset-pipeline

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