Ошибка при компиляции Capistrano - активы: прекомпиляция: не-дайджест? - PullRequest
8 голосов
/ 09 февраля 2012

Мое приложение, кажется, развертывается правильно, но я получаю эту ошибку:

      * 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

Я пробовал решения здесь для попытки скомпилировать ресурсы: http://lassebunk.dk/2011/09/03/getting-your-assets-to-work-when-upgrading-to-rails-3-1/

И здесь: http://railsmonkey.net/2011/08/deploying-rails-3-1-applications-with-capistrano/

А здесь: http://dev.af83.com/2011/09/30/capistrano-rails-3-1-assets-can-be-tricky.html

Вот мой 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

Ответы [ 5 ]

7 голосов
/ 13 февраля 2012

сначала не забудьте добавить драгоценный камень ниже

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

тогда в вашем файле cap просто добавьте эту строку в ваш after_update_code

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

у меня это нормально работало;)

ура,

Григорий Горион

2 голосов
/ 24 мая 2012

У меня такая же проблема. Я добавил это в мой deploy.rb (для добавления опции '--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

И ошибка, кажется, просто заметить:

*** [err :: my-server] ** Invoke assets:precompile (first_time)
...
1 голос
/ 25 октября 2012

Вот что у меня сработало:

1) Добавьте rvm-capistrano в ваш Gemfile

2) в confg / deploy добавьте строки:

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

3) Вам также может потребоваться установить: rvm_type и: rvm_bin_path. См. этот блог Ninjahideout , который более подробно описан.

4) apt-get / yum install nodejs на вашем сервере

(См. Мой ответ на этот связанный вопрос Stackoverflow .)

1 голос
/ 17 февраля 2012

Позже я заметил, что Capistrano не смог удалить старые версии, я получил ошибку:

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

Я нашел эту ссылку относительно этой ошибки: http://www.mail-archive.com/capistrano@googlegroups.com/msg07323.html

Мне пришлось добавить эту строку в мой файл развертывания:

default_run_options[:pty] = true

Это также решило странную ошибку, которую я получал выше.

Официальное объяснение, которого я не понимаю :)

Нет по умолчанию PTY. До версии 2.1 Capistrano запрашивал псевдо-tty для каждой выполняемой команды. Это имело побочный эффект: пользовательские скрипты профиля не загружались. Ну не надо больше! Начиная с 2.1, Capistrano больше не запрашивает pty для каждой команды, что означает, что ваш .profile (или .bashrc, или что-то еще) будет правильно загружен для каждой команды! Тем не менее, обратите внимание, что в некоторых системах сообщалось, что когда pty не выделен, некоторые команды автоматически переходят в неинтерактивный режим. Если вы не видите командную строку, как раньше, например svn или passwd, вы можете вернуться к предыдущему поведению, добавив следующую строку в ваш capfile: default_run_options [: pty] = true

0 голосов
/ 21 апреля 2014

Сообщение, которое вы видите, является выводом rake assets:precompile.

Когда вы запускаете rake 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) }
          ],
...