Capistrano的资产预编译错误

问题描述:

当我使用Capistrano的推到我的生产服务器我得到这个错误:Capistrano的资产预编译错误

executing "cd /var/www/my_app/releases/20120731082050 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile" 
servers: ["my_app.com"] 
[my_app.com] executing command 
*** [err :: my_app.com] /usr/bin/ruby1.9.1 /var/www/my_app/shared/bundle/ruby/1.9.1/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets 
*** [err :: my_app.com] 
command finished in 74149ms 

预编译的工作,尽管错误。我试着运行

cd /var/www/my_app/releases/20120731082050 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile 

在服务器和它的作品,但它打印此控制台:

/usr/bin/ruby1.9.1 /var/www/my_app/shared/bundle/ruby/1.9.1/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets 

其中Capistrano的输出相匹配(请注意,从原来的呼叫加入“nondigest”的?我知道,因为它仍然有效它不是一个致命错误,但我会怎样阻止它打印此错误

+0

尝试把--trace在年底得到一个完整的堆栈跟踪,即:CD /无功/网络/ my_app应用/发布/ 20120731082050 && bundle exec rake RAILS_ENV =生产RAILS_GROUPS =资产资产:预编译 - 跟踪 – 2012-07-31 09:58:35

我只是overrided deploy:assets任务用我自己的代码:

namespace :deploy 
    task :assets do 
    run "cd #{current_path} && bundle exec rake assets:precompile RAILS_ENV=#{rails_env}" 
    end 
end 

当您运行rake assets:precompile,如何避免违约输出

的解决方案是添加-q behand你的命令

例如executing "cd /var/www/my_app/releases/20120731082050 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile -q"

分析如下,如果你想看到:

# :gem_path/actionpack/lib/sprockets/assets.rake 
namespace :assets do 

    # task entry, it will call invoke_or_reboot_rake_task 
    task :precompile do 
    invoke_or_reboot_rake_task "assets:precompile:all" 
    end 

    # it will call ruby_rake_task 
    def invoke_or_reboot_rake_task(task) 
    ruby_rake_task task 
    end 

    # it will call ruby 
    def ruby_rake_task(task, fork = true) 
    env = ENV['RAILS_ENV'] || 'production' 
    groups = ENV['RAILS_GROUPS'] || 'assets' 
    args = [$0, task,"RAILS_ENV=#{env}","RAILS_GROUPS=#{groups}"] 
    ruby(*args) 
    end 
end 

# :gem_path/rake/file_utils.rb 
module FileUtils 

    # it will call sh 
    def ruby(*args,&block) 
    options = (Hash === args.last) ? args.pop : {} 
    sh(*([RUBY] + args + [options]), &block) 
    end 

    # it will call set_verbose_option 
    # and if options[:verbose] == true, it do not output cmd 
    # but default of options[:verbose] is an object 
    def sh(*cmd, &block) 
    # ... 
    set_verbose_option(options) 
    # ... 
    Rake.rake_output_message cmd.join(" ") if options[:verbose] 
    # ... 
    end 

    # default of options[:verbose] is Rake::FileUtilsExt::DEFAULT, which is an object 
    def set_verbose_option(options) # :nodoc: 
    unless options.key? :verbose 
     options[:verbose] = 
     Rake::FileUtilsExt.verbose_flag == Rake::FileUtilsExt::DEFAULT || 
     Rake::FileUtilsExt.verbose_flag 
    end 
    end 
end 

# :gem_path/rake/file_utils_ext.rb 
module Rake 
    module FileUtilsExt 
    DEFAULT = Object.new 
    end 
end 

# :gem_path/rake/application.rb 
      # the only to solve the disgusting output when run `rake assets:precompile` 
      # is add a `-q` option. 
      ['--quiet', '-q', 
      "Do not log messages to standard output.", 
      lambda { |value| Rake.verbose(false) } 
      ], 
      ['--verbose', '-v', 
      "Log message to standard output.", 
      lambda { |value| Rake.verbose(true) } 
      ],