So erhalten Sie Systemd zum Neustart der Rails App mit Puma

8

Ich habe mich jetzt eine Woche lang mit dieser Sache herumgeschlagen und kann wirklich keine Antwort finden. Ich habe meine Rails App mit Capistrano eingesetzt. Ich benutze Puma als Server.

Wenn ich das System bereitstelle, funktioniert alles einwandfrei. Das Problem ist, dass Puma beim Neustart und / oder beim Absturz startet.

Um die Einrichtung der Bereitstellung zu erhalten, habe ich diese Anleitung . Ich benutze auch RVM. Das Problem, das ich zu haben scheint, ist, den Service zu bekommen, um Puma zu starten. Hier ist, was ich benutzt habe (Servicedatei):

%Vor%

Das geht nicht. Ich begann zu denken, dass das Problem Ruby nicht für alle Benutzer installiert wurde, also habe ich RVM für alle Benutzer installiert und immer noch das gleiche Problem. Mein Server hat nur root und my-user.

Wenn Sie sich ansehen, wie sich Capistrano auslagert, lautet der Befehl: cd /home/my-user/apps/MyApp/current && ( RACK_ENV=production /home/my-user/.rvm/bin/rvm default do bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb --daemon ) . Wenn ich den oben erwähnten Befehl verwende, erhalte ich einen Fehler von Systmd, der sich über fehlende Parameter beschwert. Also habe ich ein Skript damit geschrieben und die Servicedatei zum Aufruf dieses Skripts bekommen, um die App zu starten.

Das funktioniert auch nicht. Beachten Sie, dass, wenn ich das Skript von irgendwo auf dem Server anrufe, das Skript die App startet, also ein Problem bei der Konfiguration von Systemd, aber ich kann nicht herausfinden, was falsch ist und ich bin mir nicht sicher, wie ich es debuggen soll. Ich habe die Debug-Seite auf der System-Website gesehen, aber es hat mir nicht geholfen. Wenn ich systemctl status puma.service ausführe, sagt alles, dass der Dienst im gescheiterten Zustand ist, aber er sagt mir nicht, wie oder warum.

Auch erwähnenswert: Wenn ich bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb aus meinem App-Ordner heraus ausführe funktioniert es ok, also wie könnte ich diesen Befehl mit dem Systemd-Dienst duplizieren?

    
WagnerMatosUK 11.07.2016, 08:36
quelle

2 Antworten

2

Haben Sie sich Foreman angesehen? Foreman macht es einfach, Ihre Anwendung zu starten und zu stoppen, wenn sie mehrere Prozesse hat. Übrigens bietet es auch eine Export Funktion, die einige systemd oder upstart Skripte für Sie generieren kann (re) Starten und stoppen Sie Ihre Anwendung.

Da du bereits Capistrano benutzt, kannst du capistrano-foreman das alles gut mit capistrano kombinieren.

>

Ich hoffe, Sie finden in diesen Ressourcen etwas Verwendung

    
Erik Deijl 11.07.2016, 09:27
quelle
17

Am Ende war das Problem zweifach: 1) rvm wurde nicht für alle Benutzer richtig installiert, was bedeutete, dass der Benutzer des Deployers kein Ruby / bundle / etc zur Verfügung hatte und sekundär das Skript auch falsch war. Zur Referenz unten ist das überarbeitete Skript, das für mich funktionierte:

%Vor%     
WagnerMatosUK 12.07.2016 13:34
quelle