[Rails] Erreur survenue lors du déploiement automatique par Capistrano (fatal: nom d'objet non valide: maître)

introduction

Actuellement, après avoir obtenu mon diplôme d'école de programmation, je crée un portfolio Publiez l'erreur survenue lors du déploiement automatique en utilisant Capistrano comme mémorandum.

■ Environnement de développement

À propos de l'introduction de Capistrano

Je l'ai présenté en me référant à l'article suivant. Si vous ne savez pas comment l'installer, veuillez vous y référer comme je l'ai fait. Comment installer l'outil de déploiement automatique (Capistrano)

À propos de l'erreur qui s'est produite

Lorsque j'ai installé Capistrano en référence à l'article ci-dessus et exécuté le déploiement automatique, une erreur s'est produite en cours de route.

Terminal (environnement local)


#Exécutez la commande de déploiement automatique suivante dans le répertoire de l'application.
$ bundle exec cap production deploy

Cliquez ici pour obtenir les détails de l'erreur après l'exécution de la commande de déploiement automatique.

Terminal (environnement local)


$ bundle exec cap production deploy
[Deprecation Notice] Future versions of Capistrano will not load the Git SCM
plugin by default. To silence this deprecation warning, add the following to
your Capfile after `require "capistrano/deploy"`:

    require "capistrano/scm/git"
    install_plugin Capistrano::SCM::Git

00:00 git:wrapper
      01 mkdir -p /tmp
    ✔ 01 [email protected] 0.239s
      Uploading /tmp/git-ssh-smot-production-nakayakouyuu.sh 100.0%
      02 chmod 700 /tmp/git-ssh-smot-production-nakayakouyuu.sh
    ✔ 02 [email protected] 0.291s
00:00 git:check
      01 git ls-remote [email protected]:nakaya-kousuke/smot.git HEAD
      01 5e943870f1583d9775b045f3c40d418324d8ad8a       HEAD
    ✔ 01 [email protected] 2.098s
00:02 deploy:check:directories
      01 mkdir -p /var/www/smot/shared /var/www/smot/releases
    ✔ 01 [email protected] 0.132s
00:03 deploy:check:linked_dirs
      01 mkdir -p /var/www/smot/shared/log /var/www/smot/shared/tmp/pids /var/www/smot/shared/tmp/cache /var/www/smot/shared/tmp/sockets /var/www/smot/sha…
    ✔ 01 [email protected] 0.224s
00:03 git:clone
      The repository mirror is at /var/www/smot/repo
00:03 git:update
      01 git remote set-url origin [email protected]:nakaya-kousuke/smot.git
    ✔ 01 [email protected] 0.237s
      02 git remote update --prune
      02 Fetching origin
    ✔ 02 [email protected] 2.093s
00:06 git:create_release
      01 mkdir -p /var/www/smot/releases/20201103133334
    ✔ 01 [email protected] 0.226s
      02 git archive master | /usr/bin/env tar -x -f - -C /var/www/smot/releases/20201103133334
      02 fatal: not a valid object name: master
      02 tar:
02 Cela ne semble pas être une archive tar
      02
      02 tar:
02 Sortie avec état d'échec en raison d'une erreur précédente
      02
#<Thread:0x00007f9e5507c1f0@/Users/nakaya-kousuke/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
        1: from /Users/nakaya-kousuke/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
/Users/nakaya-kousuke/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as [email protected]: git exit status: 2 (SSHKit::Runner::ExecuteError)
git stdout: Nothing written
git stderr: fatal: not a valid object name: master
tar:Cela ne semble pas être une archive tar
tar:Quitter avec l'état d'échec en raison d'une erreur précédente
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: git exit status: 2
git stdout: Nothing written
git stderr: fatal: not a valid object name: master
tar:Cela ne semble pas être une archive tar
tar:Quitter avec l'état d'échec en raison d'une erreur précédente


Caused by:
SSHKit::Command::Failed: git exit status: 2
git stdout: Nothing written
git stderr: fatal: not a valid object name: master
tar:Cela ne semble pas être une archive tar
tar:Quitter avec l'état d'échec en raison d'une erreur précédente

Tasks: TOP => git:create_release
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as [email protected]: git exit status: 2
git stdout: Nothing written
git stderr: fatal: not a valid object name: master
tar:Cela ne semble pas être une archive tar
tar:Quitter avec l'état d'échec en raison d'une erreur précédente

Si vous vérifiez le contenu de l'erreur ci-dessus, vous pouvez voir que l'erreur s'est produite dans la partie ** git: create_release **.

Terminal (environnement local) * Extrait du texte d'erreur


00:06 git:create_release
      01 mkdir -p /var/www/smot/releases/20201103133334
    ✔ 01 [email protected] 0.226s
      02 git archive master | /usr/bin/env tar -x -f - -C /var/www/smot/releases/20201103133334
      02 fatal: not a valid object name: master
      02 tar:
02 Cela ne semble pas être une archive tar
      02
      02 tar:
02 Sortie avec état d'échec dû à une erreur précédente
      02

fatal: not a valid object name: master Ce contenu semble être la cause de cette erreur, donc Il dit "maître n'est pas un nom d'objet valide".

Découvrez comment résoudre fatal: pas un nom d'objet valide: maître!

Lorsque j'ai recherché ** fatal: pas un nom d'objet valide: master **, j'ai trouvé de nombreux articles comme celui ci-dessous.

Remède à l'erreur Git "fatale: nom d'objet non valide: 'master'."

[Git] fatal: nom d'objet non valide: 'master'. Solution

fatal: nom d'objet non valide: 'master'. Que s'est-il passé quand on m'a dit?

[Git] fatal: nom d'objet incorrect: 'master' était en colère [généralement une telle chose]

Quand je lis cet article, ** fatal: pas un nom d'objet valide: master ** semble être une erreur survenant dans Git.

La plupart des articles vous demandent de "vous engager dans la branche principale", procédez comme suit:

Terminal (environnement local)


#Sélectionnez tous les fichiers que vous souhaitez valider
$ git add . 

#S'engager dans la branche principale
$ git commit -m "fatal: not a valid object name:Pour éliminer l'erreur principale"

#Exécuter la commande de déploiement automatique
$ bundle exec cap production deploy

** Mais cela n'a toujours pas résolu le fatal: pas un nom d'objet valide: erreur principale! ** **

Faisons une hypothèse sur quoi d'autre est la cause!

Dans Capistrano, je n'ai reçu aucun article avec l'erreur ** fatal: not a valid object name: master **, donc j'ai fait une hypothèse.

On m'a dit que "master n'est pas un nom d'objet valide" et je savais que c'était une erreur Git. J'utilise Git en premier lieu, et pourquoi puis-je pousser, valider et tirer sur la branche principale? ??

Quand j'ai regardé ** cela ne semble pas être une archive tar ** dans la déclaration d'erreur, j'ai trouvé l'article suivant:

erreur capistrano tar: cela ne ressemble pas à une archive tar

La meilleure réponse dans cet article dit ** "Je tire une branche qui n'existe pas de git" **, peut-être que j'obtiens une erreur parce que la branche master n'existe pas dans git? J'ai fait une hypothèse et l'ai étudiée.

Résolution d'erreur! !!

Quand j'ai vérifié GitHub en cours de développement, la branche par défaut était ** "main" ** au lieu de "master"! !! !! git

Par conséquent, changez la branche git de Capistrano en "main".

config/deploy.rb


# config valid only for current version of Capistrano
#Décrit la version de capistrano. Continuez à utiliser la version fixe et évitez les problèmes dus aux changements de version
lock '3.14.1'

#Utilisé pour afficher les journaux Capistrano
set :application, 'smot'

#Spécifiez à partir de quel référentiel extraire l'application
set :repo_url,  '[email protected]:nakaya-kousuke/smot.git'

----------Postscript----------
#Spécifiez une branche
set :branch, "main"
--------------------------

#Spécifiez un répertoire qui est couramment référencé même si la version change
set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads')

set :rbenv_type, :user
set :rbenv_ruby, '2.5.1' #Si vous procédez selon le programme, 2.5.1 ou 2.3.Est 1

#Quelle clé publique utiliser pour le déploiement
set :ssh_options, auth_methods: ['publickey'],
                  keys: ['~/.ssh/smot.pem'] 

#Emplacement du fichier contenant le numéro de processus
set :unicorn_pid, -> { "#{shared_path}/tmp/pids/unicorn.pid" }

#Emplacement du fichier de configuration Unicorn
set :unicorn_config_path, -> { "#{current_path}/config/unicorn.rb" }
set :keep_releases, 5

# secrets.Ajout d'un lien symbolique pour yml
set :linked_files, %w{ config/secrets.yml }

#Décrit à l'origine après "'deploy:publishing', 'deploy:restart'Supprimez ce qui suit et réécrivez comme suit
after 'deploy:publishing', 'deploy:restart'
namespace :deploy do
  task :restart do
    invoke 'unicorn:restart'
  end

  desc 'upload secrets.yml'
  task :upload do
    on roles(:app) do |host|
      if test "[ ! -d #{shared_path}/config ]"
        execute "mkdir -p #{shared_path}/config"
      end
      upload!('config/secrets.yml', "#{shared_path}/config/secrets.yml")
    end
  end
  before :starting, 'deploy:upload'
  after :finishing, 'deploy:cleanup'
end

Terminal (environnement local)


#Exécuter la commande de déploiement automatique
$ bundle exec cap production deploy

Vous avez réussi le déploiement automatique! !! !!

Information supplémentaire

Pourquoi la branche par défaut de GitHub a-t-elle été définie sur "main"? ?? ?? J'ai vérifié.

■ Article de référence GitHub, le nom de branche par défaut du référentiel à créer est "main". Passer de "maître" à "principal"

** La branche par défaut de GitHub est passée de "master" à "main"! ** **

Ce changement est basé sur le mouvement des droits humains déclenché par l'incident de Minneapolis, Minnesota, États-Unis, le 25 mai 2020.

J'ai appris que de tels incidents peuvent également affecter l'industrie informatique.

À propos, il semble que le nom de branche par défaut du référentiel nouvellement créé puisse être modifié arbitrairement en définissant GitHub.

Recommended Posts

[Rails] Erreur survenue lors du déploiement automatique par Capistrano (fatal: nom d'objet non valide: maître)
[Git] fatal: nom d'objet non valide: 'master'.
Erreur de valeur de vérification survenue dans l'environnement de clustering
À propos de l'erreur survenue lors de l'ajout d'un nom de colonne dans les rails (rails db: migrate, rails db: rollback, add)
[Rails] À propos de l'erreur selon laquelle l'image n'est pas affichée dans l'environnement de production