Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deployment auf Webhoster cyon.ch schlägt fehlt #89

Closed
ynamite opened this issue May 23, 2024 · 14 comments · Fixed by #90
Closed

deployment auf Webhoster cyon.ch schlägt fehlt #89

ynamite opened this issue May 23, 2024 · 14 comments · Fixed by #90

Comments

@ynamite
Copy link

ynamite commented May 23, 2024

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.

[remote] run command -v 'git' || which 'git' || type -p 'git'
[remote] /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
[remote]  error  in info.php on line 8:
[remote] exit code 127 (Command not found)
done deploy:info 167ms
@ynamite
Copy link
Author

ynamite commented May 23, 2024

#82

@ynamite
Copy link
Author

ynamite commented May 23, 2024

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

@gharlan
Copy link
Member

gharlan commented May 23, 2024

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.

@ynamite
Copy link
Author

ynamite commented May 23, 2024

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 🤦

@ynamite
Copy link
Author

ynamite commented May 23, 2024

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.

@gharlan
Copy link
Member

gharlan commented May 23, 2024

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).

@gharlan
Copy link
Member

gharlan commented May 23, 2024

Oder rufst du dep release auf? Mir fällt gerade auf, dass es da vielleicht wirklich nicht passt. Das muss ich nochmal testen.

@gharlan
Copy link
Member

gharlan commented May 23, 2024

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.

@ynamite
Copy link
Author

ynamite commented May 23, 2024

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

@ynamite
Copy link
Author

ynamite commented May 23, 2024

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!

@gharlan
Copy link
Member

gharlan commented May 23, 2024

Kann es sein, dass du den Deploy-Path nicht als absoluten Pfad angibst? (->setDeployPath)

@ynamite
Copy link
Author

ynamite commented May 23, 2024

Mein Deploy-Path sieht so aus: public_html/stage.
Also ->setDeployPath('public_html/stage').

Das ist ausgehend vom Root der absolute Pfad.

@gharlan
Copy link
Member

gharlan commented May 23, 2024

Da fehlt dann aber der Slash vorne. Also der Deploy-Path sollte als absoluter Pfad angegeben werden.
/public_html/stage

@ynamite
Copy link
Author

ynamite commented May 23, 2024

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: #89 (comment)

Danke, hat mich auf die richtige Fährte gebracht.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants