0

カピストラーノを使用して本番サーバーにプッシュすると、次のエラーが発生します。

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

これはカピストラーノの出力と一致します (元の呼び出しから「nondigest」が追加されていることに注意してください。それでも動作するため、致命的なエラーではないことはわかっていますが、このエラーの出力を停止するにはどうすればよいですか?

4

2 に答える 2

0

を実行するrake assets:precompileと、デフォルトの出力を回避する方法

解決策は、コマンドの後ろに追加することです。-q

例えば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) }
          ],
于 2014-04-21T03:18:16.663 に答える
0

deploy:assets私は自分のコードでタスクをオーバーライドしました:

namespace :deploy
  task :assets do
    run "cd #{current_path} && bundle exec rake assets:precompile RAILS_ENV=#{rails_env}"
  end
end
于 2012-08-26T23:03:36.713 に答える