我的应用程序部署在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.
这可能吗?
我发现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中,它似乎没有什么区别 - 资产是以任何方式缓存的.
有谁知道哪个合适?
我想有选择地压缩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不会被更改.
ActionView::Template::Error (leagues/lal11.png isn't precompiled):
Run Code Online (Sandbox Code Playgroud)
添加新联赛后,我的应用中会发生此类错误,但尚未预编译对应的图像。
我了解为什么会这样;资产清单缺少相关路径,因此Rails无法为其确定摘要。但是,由于缺少简单的映像而杀死整个应用程序是愚蠢的。有没有办法捕获这个特定的异常?
我在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) 我有一个标准的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
我试图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) 在/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:precompile在production环境中:
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.
我有一个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
我尝试在部署之前使用以下命令预编译我的图像:
$ RAILS_ENV=production bin/rake assets:precompile
我正在使用image_tag我的模板,在开发中工作.
更新:config.serve_static_files据说在dev中默认为true,但之后在生产中关闭,因为资产应该通过您的Web服务器提供.我目前只是在heroku上使用免费套牌而且仍在运行webrick,所以我将此设置为true,但没有运气.
更新2:当我设置config.serve_static_files为false,heroku没有看到我的任何资产时,我的所有样式都消失了,图像仍然没有.虽然heroku确实发送了一条警告消息,告诉大师说所有" config.serve_static_files确实能够提供服务公共文件夹中的所有内容,并且与资产管道无关." 我认为它与资产管道无关,因为它只是提供公共文件夹中的资产而不查看我们的资产目录.我也看到heroku在部署时运行预编译命令,所以我不需要每次都这样做.
这让我想知道我使用它调用我的资产的方式image_tag是否可能是问题,但我不确定为什么会这样?
更新3:资产管道的rails指南说:"在常规视图中,您可以访问public/assets/images目录中的图像,如下所示:<%= image_tag "rails.png" %>.我正在使用此约定调用我的图像<%= image_tag("lab49", size: "80x30") %>,但图像仍然不会出现.
更新4:看到我的回答.
asset-pipeline ×10
heroku ×2
javascript ×2
ruby ×2
angularjs ×1
apache ×1
assets ×1
capistrano ×1
jquery ×1
sprockets ×1