我的部署速度很慢,至少需要3分钟.部署期间缓慢的Capistrano任务是资产:预编译.这大约占总部署时间的99%.我怎样才能加快速度呢?我应该在我的本地计算机上预编译我的资产并将它们添加到我的git仓库吗?
编辑:添加config.assets.initialize_on_precompile = false到我的application.rb文件,半分钟后删除预编译时间,但它仍然很慢.
我使用rails 4和ruby 1.9.3作为我的应用程序和fancybox2-railsgem,但是资产管道存在一个普遍的问题.如果我运行rake task了预编译,那么一切都只是在出细腻的图像vendor/assets/images和../gems/ruby-1.9.3-p327/gems/fancybox2-rails-0.2.1/vendor/assets/images.来自这两个文件夹的图像没有被预编译,最终我遇到了与不存在的图像的死链接的问题.有什么建议?
有人可以向我解释这个命令到底rake assets:clean是做什么的吗?不幸的是Rails指南不提它.还有命令rake assets:cleanup.有什么不同?
此外,有人可以告诉我什么时候必须rake assets:precompile在生产中运行.在将所有应用程序文件部署到生产服务器后,是否在服务器控制台上运行它?或者我precompile在本地计算机上然后部署所有文件?
谢谢大家
我不想在开发模式下连接JavaScript文件,而是将它们作为单独的文件提供.所以我配置了:
development.rb:
config.assets.compress = false
config.assets.debug = true
config.assets.compile = true
Run Code Online (Sandbox Code Playgroud)
在我的/ app/assets/javascript目录中,我有:
reviews.js:
//= require jquery
//= require jquery_ujs
//= require_tree ./reviews
Run Code Online (Sandbox Code Playgroud)
我<%= javascript_include_tag "reviews" %>在我的布局中包含了JavaScript .生成的页面正确地单独引用三个脚本,reviews.js并且基本上是空的.到现在为止还挺好.
现在,当我使用rake assets:precompile三个JavaScript文件连接到预生成我的资产进行生产时reviews.js.这是一切优秀的生产,但现在,在开发模式,级联reviews.js供应除了两个单独的文件.
当然,这会在开发时导致各种令人讨厌的错误,因为现在,内容foo.js和bar.js服务两次,其中一个可能是旧的版本reviews.js.
如何确保Rails在开发模式下不使用预编译资产?
我一直在将应用程序转换为Rails 3.1(现在转到3.2)并在资产管道上观看Railscast.我将所有第三方jquery插件文件移动到/ vendor/assets/javascripts /目录.在我的/app/assets/javascripts/application.js中,我有以下内容:
//= require jquery
//= require jquery_ujs
//= require_tree .
//= require_self
Run Code Online (Sandbox Code Playgroud)
我意识到require_tree .调用只加载/ app/assets/javascripts /目录的树.(这是正确的吗?)包含所有 "供应商"javascripts 的最佳方式是什么?(我现在并不担心订购.)当然,我可以在/app/assets/javascripts/application.js中逐行索取.我的另一个想法是使用以下内容创建/vendor/assets/javascripts/vendor_javascripts.js:
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
然后在/app/assets/javascripts/application.js中添加以下内容:
//= require vendor_javascripts
Run Code Online (Sandbox Code Playgroud)
这看起来有点笨拙.有没有更好的方法来自动包含所有"供应商"(和/或"lib")javascripts?
PS.我看到了关于index.js文件的内容,但我最终可能会得到多个名为index.js的文件,对吧?哦,我尝试重新启动我的服务器.
问题正是标题所说的.javaScript位于资产管道中,即assets/javascripts/myfile.js.coffee在application.js中我有:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require jquery.ui.all
//= requier twitter/bootstrap
//= require jasny-bootstrap
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
这是coffeescript
$(document).ready ->
$("#close").click ->
$(this).parent().parent().slideUp("slow")
$( "#datepicker" ).datepicker
dateFormat : "yy-mm-dd"
player_count = $("#player option").length
$('#btn-add').click ->
$('#users option:selected').each ->
if player_count >= 8
$('#select-reserve').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>")
$(this).remove()
else
$('#player').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>")
$(this).remove()
player_count++
$('#btn-remove').click ->
$('#player option:selected').each ->
$('#users').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>")
$(this).remove()
player_count--
$('#btn-remove-reserve').click ->
$('#select-reserve option:selected').each ->
$('#users').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>")
$(this).remove()
$("#submit").click ->
$("select option").prop("selected", "selected")
Run Code Online (Sandbox Code Playgroud)
我可以在浏览器的源代码中看到javaScript已经加载,但它只在我重新加载页面后才能工作.
这是在另一个问题中提出的,但在3.1rc1中,没有一个解决方案对我有用.
我正在尝试使用rails 3.1中的新资产 - 我有文件:
./vendor/assets/stylesheets/jquery-ui-1.8.13.custom.css
./vendor/assets/javascripts/jquery-ui-1.8.13.custom.min.js
Run Code Online (Sandbox Code Playgroud)
然后我补充说:
//= require jquery-ui to app/assets/javascripts/application.js
*= require jquery-ui to app/assets/stylesheets/application.css
Run Code Online (Sandbox Code Playgroud)
jquery-ui javascript文件加载得很好,但是css文件说:
Sprockets::FileNotFound (couldn't find file 'jquery-ui'
(in /home/xanview2/xancar/app/assets/stylesheets/application.css):6):
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试将现有应用程序转换为新的3.1资产管道布局,并希望包含许多必须按特定顺序排列的供应商文件(underscore.js和backbone是一对).因此,我不能只使用a = require_tree .来提取我的供应商文件,(不用前缀重命名每个文件.Yuck).
以下是我的app/assets/javascripts/application.js文件:
//= require modernizr-1.7 //= require jquery-1.6.1 //= require underscore-1.1.5 //= require backbone-0.3.3 //= require_tree .
我尝试了with/out扩展的每个组合,带有/ out的require_tree和with/out的相对路径,没有任何效果.我的所有供应商文件都在/vendor/assets/javascripts/.
我觉得我是愚蠢的,因为这似乎是一个明显的用例,(包括按顺序名称的特定文件在JS中很常见,不是吗?)我必须做一些愚蠢的事情吗?
我试图在我的Rails 3.1应用程序中将一些外部图像(由jQuery插件使用)放到供应商/资产/图像中.问题是,当我尝试这样的事情:
<%= image_tag "ui-bg_flat_75_ffffff_40x100.png" %>
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
No route matches [GET] "/assets/ui-bg_flat_75_ffffff_40x100.png"
Run Code Online (Sandbox Code Playgroud)
我检查了我的Rails.application.config.assets.paths并列出了这些目录:
..../app/assets/images
..../app/assets/javascripts
..../app/assets/stylesheets
..../vendor/assets/images
..../vendor/assets/stylesheets
..../.rvm/gems/ruby-1.9.2-p180@mygems/gems/jquery-rails-1.0.9/vendor/assets/javascripts
Run Code Online (Sandbox Code Playgroud)
如您所见,/ vendor/assets/images列在那里.如果我将我的图像放到app/assets/images,一切正常.
我认为新资产管道应该遍历所有资产目录并在任何地方提供所请求的文件.
有谁知道这里的问题是什么?
使用Rails 3.1.0.rc4,我正在尝试访问javascript文件中的路由助手(在本例中为event.js.erb),看起来它们当时没有加载.在请求合并的/assets/application.js文件时,我得到:
throw Error("NameError: undefined local variable or method `events_path' for #<#<Class:0x00000001580010>:0x00000003191510>\n (in /<...>/app/assets/javascripts/event.js.erb)")
Run Code Online (Sandbox Code Playgroud)
知道如何在那里访问路由助手吗?