Closed ynamite closed 4 months ago
Auch hier funktioniert der Fix aus dem Issue 82 , allerdings scheitert es dann bei task deploy:lock
mit folgendem Fehler:
[remote] run [ -f /public_html/stage/.dep/deploy.lock ] && echo +locked || echo 'ynamite' > /public_html/stage/.dep/deploy.lock
[remote] bash: Zeile 1: /public_html/stage/.dep/deploy.lock: Datei oder Verzeichnis nicht gefunden
[remote] error in lock.php on line 9:
[remote] exit code 1 (General error)
done deploy:lock 133ms
ERROR: Task deploy:lock failed!
Problem ist, dass bei diesem Hosting der Befehl echo 'ynamite' > /public_html/stage/.dep/deploy.lock
die Datei nicht gleich erstellt.
edit: mein Fehler, stupid me, ich hatte den deployment Pfad falsch angegeben
mit der vanilla deployer config
Was meinst du damit? Also wirklich rein deployer ohne ydeploy? Oder bindest du die deploy.php (oder deploy_yak.php) aus dem Addon mit ein?
Denn Deployer geht default ja anders mit dem Deployment um. Da wird auf dem Server per git das Repository geladen. YDeploy konfiguriert es aber so, dass es per Git auf dem lokalen Rechner geladen wird, und per rsync hochgeladen wird.
Entschuldige, ich meine mit ydeploy vanilla config. Ich binde die ydeploy_yak.php ein.
Wie's funktioniert ist mir mittlerweile eigentlich klar, aber du siehst ja im log, dass es nicht richtig aufgerufen wird.
Das kann imo nicht funktionieren, wenn hier der remote Pfad verwendet wird:
[localhost] run /usr/local/cpanel/3rdparty/lib/path-bin/git rev-parse --abbrev-ref HEAD
Das Problem mit deploy:lock habe ich mittlerweile gelöst. Ich bin dumm und habe den deployment Pfad mit einem Slash am Anfang angegeben. Also statt public_html/stage
hatte ich /public_html/stage
🤦
Hier meine komplette deploy.php im Root meines Projekts:
<?php
namespace Deployer;
if ('cli' !== PHP_SAPI) {
throw new \Exception('The deployer configuration must be used in cli.');
}
require __DIR__ . '/src/addons/ydeploy/deploy_yak.php';
set(
'bin/php',
function () {
return '$HOME/Library/Application\ Support/Herd/bin/php';
}
);
// Hosts
host($deploymentName)
->setHostname($deploymentHost)
->setRemoteUser($deploymentUser)
->setPort($deploymentPort)
->set('http_user', 'benutzername')
->set('labels', ['stage' => $deploymentType])
->setDeployPath($deploymentPath)
->set(
'bin/php',
function () {
return run('which php');
}
);
set('repository', $deploymentRepository);
zusätzlich habe ich die Anpassungen aus Issue 82 in der ydeploy config.php gemacht.
Das kann imo nicht funktionieren, wenn hier der remote Pfad verwendet wird:
Das stimmt schon. Aber bei mir wird der lokale Pfad verwendet (wie ich im anderen Issue getestet hatte).
Bei mir steht vor der entsprechenden Zeile auch [local]
(siehe mein Log im anderen Issue), bei dir aber [remote]
. Da müssen wir rausfinden, wieso das so ist.
Bei dir steht noch deploy:info
. Es ist also noch nicht ydeploy 2.0.1, oder? Oder passiert es erst im späteren Schritt (in 2.0.0 kam deploy:info
zwei Mal, seit 2.0.1 kommt am Anfang build:info
und später deploy:info
).
Oder rufst du dep release
auf? Mir fällt gerade auf, dass es da vielleicht wirklich nicht passt. Das muss ich nochmal testen.
Ok, ich sehe es nun, wo es hängt. Bei dep deploy
wird git am Anfang zwar lokal gesucht, aber im späteren Verlauf wird es dann tatsächlich nochmal gesucht, dann auf dem Server.
Ich werde das korrigieren.
Bei dir steht noch deploy:info. Es ist also noch nicht ydeploy 2.0.1, oder?
Ist ydeploy 2.0.1
Oder rufst du dep release auf?
ich rufe einfach dep deploy -vvv
auf.
Hier nochmal der Output, habe nun mein deployment name auf stage
geändert, damit es klarer ist.
task deploy:info
[stage] ~/Library/Application Support/Herd/bin/php83 ~/Herd/***/vendor/deployer/deployer/dep worker --port 58439 --task deploy:info --host stage --decorated -vvv
[stage] ssh '-p' '22' '-A' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=60' '-o' 'ControlPath=~/.ssh/***:22' '***' ': 7cbfdd99588258212889; bash -ls'
[stage] run if [ -d public_html/stage/.dep ]; then echo +yes; fi
⠏ zyvu@frisco-baurealisierung.ch's password: ⠸
[stage] +yes
[stage] ssh '-p' '22' '-A' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=60' '-o' 'ControlPath=~/.ssh/***:22' '***' ': c51ad626e70d75dc4d38; bash -ls'
[stage] run cd public_html/stage && (cat .dep/latest_release || echo 0)
[stage] 1
[stage] ssh '-p' '22' '-A' '-o' 'ControlMaster=auto' '-o' 'ControlPersist=60' '-o' 'ControlPath=~/.ssh/***:22' '***' ': 9c8cec6f9a3510d30bc0; bash -ls'
[stage] run command -v 'git' || which 'git' || type -p 'git'
[stage] /usr/local/cpanel/3rdparty/lib/path-bin/git
[localhost] run /usr/local/cpanel/3rdparty/lib/path-bin/git rev-parse --abbrev-ref HEAD
[localhost] bash: line 1: /usr/local/cpanel/3rdparty/lib/path-bin/git: No such file or directory
[stage] error in info.php on line 8:
[stage] exit code 127 (Command not found)
Mit meinem Fix scheint es zu klappen. Ich habe zwar noch einen weiteren Fehler, der erst bei deploy:writeable geschieht, aber ich glaube den kann ich fixen, in dem ich statt acl
für writable_mode
dann chmod
verwende. Ich teste weiter
Und noch ein Problem und zwar in deploy:release
, aber ich denke das ist mehr bei deployer selbst im release recipe bzw. beim Webhoster.
[stage] run cd public_html/stage && (ln -nfs --relative releases/3 public_html/stage/release)
[stage] ln: die symbolische Verknüpfung „public_html/stage/release“ konnte nicht angelegt werden: Datei oder Verzeichnis nicht gefunden
[stage] error in release.php on line 132:
[stage] exit code 1 (General error)
done deploy:release 567ms
ERROR: Task deploy:release failed!
Wenn ich entweder aus dem Root heraus
ln -nfs --relative public_html/stage/releases/3 public_html/stage/release
oder unter public_html/stage
ln -nfs --relative releases/3 release
mache, klappt es ... falls du eine Idee hast, bin ich natürlich froh :) scheint als müsste ich deploy:release
komplett überschreiben. Hmpf.
Danke schon mal!
Kann es sein, dass du den Deploy-Path nicht als absoluten Pfad angibst? (->setDeployPath
)
Mein Deploy-Path sieht so aus: public_html/stage
.
Also ->setDeployPath('public_html/stage')
.
Das ist ausgehend vom Root der absolute Pfad.
Da fehlt dann aber der Slash vorne. Also der Deploy-Path sollte als absoluter Pfad angegeben werden.
/public_html/stage
Ah, wenn ich es so angebe, läufts:
->setDeployPath('~/public_html/stage')
/public_html/stage
geht eben nicht, das hatte ich anfänglich und führte zu dem Fehler hier: https://github.com/yakamara/ydeploy/issues/89#issuecomment-2126478230
Danke, hat mich auf die richtige Fährte gebracht.
Bei Cyon klappt das deployment bei mir mit der vanilla ydeploy deployer config nicht. Git wird von deployer nicht gefunden. Augenscheinlich weil deployer Git mit
which git
auf dem Remote sucht, aber lokal ausführt. Auf dem remote gibt es kein Repo ... Ähnliches Problem wie bei meinem anderen Issue.Das ist das erste Mal, dass ich deployer mit Cyon verwende. Irgendwas ist an deployer faul. @gharlan wir können das gerne im Detail testen, ich muss das nämlich heute oder morgen deployen.