Rails 6 Capistrano Deployment Failure - Ресурсы Webpacker: прекомпиляция - PullRequest
0 голосов
/ 10 октября 2019

В настоящее время я пытаюсь запустить приложение Rails 6 в производство на сервере Ubuntu, и для этого я использую Capistrano. Я потратил один день, чтобы подготовить проект, и он работает довольно хорошо, но я не могу обойти одну ошибку. Я следовал инструкциям на webpacker, чтобы связать зависимости в related_dirs и запустить yarn install перед ресурсами: precompile, вот когда я получаю эту ошибку:

00:47 deploy:assets:precompile
      01 $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile
      01 [Simple Form] Simple Form is not configured in the application and will use the default values. Use `rails generate simple_form:install` to generate the Simple Form configuration.
      01 I, [2019-10-10T11:01:27.724567 #10699]  INFO -- : Writing /home/deploy/webmenue/releases/20191010110029/public/assets/pdf-9124940acc21064e2797d4fc331490b7dd2616867e513e126f2a163025a71bc7.css
      01 I, [2019-10-10T11:01:27.725085 #10699]  INFO -- : Writing /home/deploy/webmenue/releases/20191010110029/public/assets/pdf-9124940acc21064e2797d4fc331490b7dd2616867e513e126f2a163025a71bc7.css.gz
      01 I, [2019-10-10T11:01:27.728319 #10699]  INFO -- : Writing /home/deploy/webmenue/releases/20191010110029/public/assets/MultiFactor-ec7b30855ff129ef43275ce9047d6b28196613335a7fde0aa2b9b937c7e7b0e6.png
      01 I, [2019-10-10T11:01:27.733297 #10699]  INFO -- : Writing /home/deploy/webmenue/releases/20191010110029/public/assets/logo-d3cf944e7b444e9265ffc5708b91386900a04c498681b2ee8b4537e92ce93757.jpg
      01 I, [2019-10-10T11:01:27.737513 #10699]  INFO -- : Writing /home/deploy/webmenue/releases/20191010110029/public/assets/top-1b883a805cfc1445462e1accd2d4f9db4062476e1d0ca24842f2691e8ca72231.png        
      01 I, [2019-10-10T11:01:28.315834 #10699]  INFO -- : Writing /home/deploy/webmenue/releases/20191010110029/public/assets/express/lib/application-9232ebdb20ad39572e70fb9e29810e63dbb63b58f5f18617c7c2bc8…
      01 I, [2019-10-10T11:01:28.316656 #10699]  INFO -- : Writing /home/deploy/webmenue/releases/20191010110029/public/assets/express/lib/application-9232ebdb20ad39572e70fb9e29810e63dbb63b58f5f18617c7c2bc8…
      01 Compiling…
      01 Compilation failed:
      01
#<Thread:0x00000000031d6db8@C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/sshkit-1.20.0/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
        1: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/sshkit-1.20.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/sshkit-1.20.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as deploy@142.93.104.71: rake exit status: 1 (SSHKit::Runner::ExecuteError)

В потоке StackOverflow кто-то сказал, что может, потому что яиспользуете сервер DigitalOcean за 5 $ с оперативной памятью всего 1 ГБ? Может ли это быть проблемой? Кажется, веб-упаковщик работает!

Есть предложения?

Спасибо!

1 Ответ

0 голосов
/ 10 октября 2019

Хорошо, после некоторого изучения документации веб-упаковщика, я смог решить проблему. Для всех, кто может столкнуться с этой проблемой позже, я попытаюсь объяснить, в чем проблема:

Я запускаю сервер на DigitalOcean с 1 ГБ оперативной памяти (самый дешевый за 5 $) и компиляцию дляМатериал для веб-упаковщиков был слишком большим для сервера. Поэтому я решил сделать компиляцию перед загрузкой материала на сервер с помощью следующей задачи:

# lib/capistrano/precompile.rake (create this file)

namespace :assets do
    desc 'Precompile assets locally and then rsync to web servers'
    task :precompile do
      run_locally do
        with rails_env: stage_of_env do
          execute :bundle, 'exec rake assets:precompile'
        end
      end

      on roles(:web), in: :parallel do |server|
        run_locally do
          execute :rsync,
            "-a --delete ./public/packs/ #{fetch(:user)}@#{server.hostname}:#{shared_path}/public/packs/"
          execute :rsync,
            "-a --delete ./public/assets/ #{fetch(:user)}@#{server.hostname}:#{shared_path}/public/assets/"
        end
      end

      run_locally do
        execute :rm, '-rf public/assets'
        execute :rm, '-rf public/packs'
      end
    end
  end

Это решило проблему в моем случае! Я надеюсь, что это поможет кому-то в будущем!

...