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.
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)
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".
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! ** **
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.
Quand j'ai vérifié GitHub en cours de développement, la branche par défaut était ** "main" ** au lieu de "master"! !! !!
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! !! !!
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