2012-02-08 20 views
8

Mi aplicación parece estar desplegando correctamente, pero estoy recibiendo este error:Error de compilación de activos de Capistrano - assets: precompile: nondigest?

 * executing "cd /home/deploy/tomahawk/releases/20120208222225 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile" 
    servers: ["ip_address"] 
    [ip_address] executing command 
*** [err :: ip_address] /opt/ruby/bin/ruby /opt/ruby/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets 

He intentado soluciones aquí para intentar compilar activos: http://lassebunk.dk/2011/09/03/getting-your-assets-to-work-when-upgrading-to-rails-3-1/

Y aquí: http://railsmonkey.net/2011/08/deploying-rails-3-1-applications-with-capistrano/

Y aquí: http://dev.af83.com/2011/09/30/capistrano-rails-3-1-assets-can-be-tricky.html

aquí es mi deploy.rb:

require "bundler/capistrano" 
load 'deploy/assets' 

set :default_environment, { 
'PATH' => "/opt/ruby/bin/:$PATH" 
} 

set :application, "tomahawk" 
set :repository, "repo_goes_here" 
set :deploy_to, "/home/deploy/#{application}" 
set :rails_env, 'production' 
set :branch, "master" 

set :scm, :git 
set :user, "deploy" 
set :runner, "deploy" 
set :use_sudo, true 

role :web, "my_ip"       
role :app, "my_ip"       
role :db, "my_ip", :primary => true 

set :normalize_asset_timestamps, false 
after "deploy", "deploy:cleanup" 

namespace :deploy do 
    desc "Restarting mod_rails with restart.txt" 
    task :restart, :roles => :app, :except => { :no_release => true } do 
     run "touch #{current_path}/tmp/restart.txt" 
    end 

    [:start, :stop].each do |t| 
     desc "#{t} task is a no-op with mod_rails" 
     task t, :roles => :domain do ; end 
    end 
end 

task :after_update_code do 
run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml" 
end 
+0

Tengo exactamente lo mismo cuando despliegue mi aplicación Rails 3.1. Creo que está oculto en la tarea de [sprockets rake] (https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake) en algún lugar, pero no lo veo. ¿Podría ser que la tarea 'precompile: assets: nondigest' registre una advertencia para stderr o algo así, y esto es recogido por capistrano? – HectorMalot

+0

Para ser sincero, estas cosas sin importancia están un poco fuera de mi alcance de comprensión (aún me estoy prendiendo de la precompilación :), pero le mostré esto a un amigo y él dijo esto ... "No creo que esos sean errores en todos Creo que la salida está mal de alguna manera, piensa que es un flujo de error cuando está usando la salida normal, siempre que la implementación finalice, debería estar bien, un error real detiene la ejecución – fatfrog

Respuesta

1

más tarde me di cuenta de que Capistrano no fue capaz de eliminar las liberaciones de edad, que tiene un error:

*** [err :: ip_address] sudo: no tty present and no askpass program specified 

me encontré con este enlace respecto a este error: http://www.mail-archive.com/[email protected]/msg07323.html

he tenido que añadir esta línea a mi archivo de implementación:

default_run_options[:pty] = true 

Esto también resolvió el extraño error que estaba obteniendo arriba.

La explicación oficial, lo que no entiendo :)

No PTY defecto. Antes de 2.1, Capistrano solicitaría un pseudo-tty para cada comando que ejecutara. Esto tuvo el efecto secundario de provocar que los scripts de perfil para el usuario no se carguen. Bueno, ¡nada más! A partir de 2.1, Capistrano ya no solicita una pty en cada comando, lo que significa que su .profile (o .bashrc, o lo que sea) se cargará correctamente en cada comando. Sin embargo, tenga en cuenta que algunos han informado sobre algunos sistemas, cuando no se asigna una pty, algunos comandos entrarán en modo no interactivo automáticamente. Si no aparece el comando prompt como solía hacerlo, como svn o passwd, puede volver al comportamiento anterior agregando la siguiente línea a su capfile: default_run_options [: pty] = true

7

primera no se olvide de añadir la gema continuación

group :production do 
gem 'therubyracer' 
gem 'execjs' 
end 

continuación, en el archivo de la tapa sólo tiene que añadir esta línea en su after_update_code

run "cd #{release_path}; rake assets:precompile RAILS_ENV=production " 

esto funcionó bien para mí;)

aplausos,

Gregory HORION

+4

hey amigo, le aconsejo que no muestre su ip en su mensaje, esto puede llevar a algunos ataques en su servidor;) ¡Salud! – metakungfu

+0

¡Woops! :) ¡Tengo que ver eso de copiar y pegar! – fatfrog

2

Tengo el mismo problema . He agregado esto a mi despliegue.rb (para añadir la opción '--trace'):

namespace :deploy do 
    namespace :assets do 
    task :precompile, :roles => :web, :except => { :no_release => true } do 
     run "cd #{current_path} && #{rake} RAILS_ENV=#{rails_env} RAILS_GROUPS=assets assets:precompile --trace" 
    end 
    end 
end 

y error parece ser sólo aviso:

*** [err :: my-server] ** Invoke assets:precompile (first_time) 
... 
1

Esto es lo que funcionó para mí:

1) Añadir RVM-Capistrano a su Gemfile

2) en confg/implementar, agregue las líneas:

require 'rvm/capistrano' 
set :rvm_ruby_string, '1.9.2' # Set to your version number 

3) También es posible que deba establecer: rvm_type y: rvm_bin_path. Ver this Ninjahideout blog que entra en más detalles.

4) apt-get/yum install nodejs en su servidor

(Véase mi respuesta a esta related Stackoverflow question.)

0

El mensaje que se ve es la salida de rake assets:precompile.

Cuando se ejecuta rake assets:precompile, cómo evitar la salida por defecto

la solución es añadir -q behand su comando,

análisis está por debajo, si usted quiere ver:

# :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) } 
      ], 
Cuestiones relacionadas