Ausführen eines Ruby-Skripts über PHP als WWW-Daten

Ausführen eines Ruby-Skripts über PHP als WWW-Daten

Ich führe eine PHP-Anwendung auf einem Apache-Server aus. Von der PHP-Anwendung aus muss ich ein Ruby-Skript auf der Befehlszeile ausführen. Ich habe überprüft, dass das Ausführen des Skripts direkt von einem Terminal aus userordnungsgemäß funktioniert. Die lokale Ruby-Umgebung userwird durch Festlegen einer Pfadvariable und einer Quelle eingerichtet, /home/user/.rvm/scripts/rvmdie es dem Skript ermöglicht, die Anforderungen mit Anweisungen zu laden require.

Nun schlägt das Skript über die PHP-Anwendung bei diesen require-Anweisungen fehl und ich nehme an, dass dies daran liegt, dass keine Ruby-Umgebung für den www-dataBenutzer eingerichtet ist. Ich habe Ruby noch nie zuvor verwendet und bin mir nicht sicher, wie ich diese Umgebung richtig einrichten kann.

Antwort1

Ich konnte das herausfinden. Ich habe die Antwort auf meine Frage auf SO gepostet. Hoffe, es hilft!

https://stackoverflow.com/a/40224414/1672458

Ich konnte das herausfinden. Zuerst habe ichRVM installiertals Mehrbenutzerinstallation, um sicherzustellen, dass das www-dataKonto darauf zugreifen kann.

$ curl -sSL https://get.rvm.io | sudo bash -s stable

Installieren Sie die gewünschte Ruby-Version, in meinem Fall 2.3.1, und richten Sie dann rvm für die Verwendung ein:

$ rvm install 2.3.1
$ rvm use 2.3.1

Führen Sie es aus gem, um alle benötigten Gems zu installieren. Da RVM eine Mehrbenutzerinstallation ist, werden diese Gems im System und nicht bei Ihrem spezifischen Benutzer gespeichert.

$ gem install packagename

Ich weiß nicht, ob das notwendig ist, aber ich würde die SSH-Sitzung schließen und erneut öffnen. RVM manipuliert Umgebungsvariablen, also ist Vorsicht besser als Nachsicht.

Ausführen env, um alle Umgebungsvariablen zu drucken. printenvFunktioniert auch, wenn enves aus irgendeinem Grund nicht funktioniert. Sie erhalten eine große Liste aller festgelegten Variablen, Sie benötigen nur die Ruby-bezogenen Variablen.Kopieren/fügen Sie diese Werte nicht ein. Es sind Beispiele, die ich aus meinem System gezogen habe. Ihre Werte werden anders sein!

PATH=/usr/local/rvm/gems/ruby-2.3.1/bin:/usr/local/rvm/gems/ruby-2.3.1@global/bin:/usr/local/rvm/rubies/ruby-2.3.1/bin:/usr/local/rvm/bin:/home/steven/bin:/home/steven/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
rvm_bin_path=/usr/local/rvm/bin
GEM_HOME=/usr/local/rvm/gems/ruby-2.3.1
IRBRC=/usr/local/rvm/rubies/ruby-2.3.1/.irbrc
MY_RUBY_HOME=/usr/local/rvm/rubies/ruby-2.3.1
rvm_path=/usr/local/rvm
rvm_prefix=/usr/local
rvm_ruby_string=ruby-2.3.1
GEM_PATH=/usr/local/rvm/gems/ruby-2.3.1:/usr/local/rvm/gems/ruby-2.3.1@global
RUBY_VERSION=ruby-2.3.1

Jetzt brauchen wir PHP, um diese Variablen zu erkennen. Sie müssen die richtige Datei auf Ihrem System finden, was schwierig sein kann. Ich habe keine Möglichkeit herauszufinden, welche die richtige ist, ich habe es mit Ausprobieren versucht.

Die Datei auf meinem System ist /etc/php/5.6/fpm/pool.d/www.conf. Add alleder Umgebungsvariablen, die Sie zuvor in diese Datei mit dem folgenden Format übernommen haben. Beachten Sie, dass Sie sie PATHauch hier benötigen!

env[rvm_path] = /usr/local/rvm
env[rvm_prefix] = /usr/local

Starten Sie nun neu php-fpm. Ihr Dienstname kann sich von meinem unterscheiden; ich verwende den 5.6-Build von ondrej/php.

Ubuntu 15.04 und neuer (systemd):

$ sudo systemctl restart php5.6-fpm

Ubuntu 14.10 und neuer:

$ sudo service php5.6-fpm restart

Schließlich müssen Sie im Skript selbst cddas Verzeichnis angeben, aus dem Sie den Befehl ausführen bundle. Mein kurzes Skript sieht folgendermaßen aus:

cd /opt/slate
/usr/bin/git reset --hard
/usr/bin/git pull
bundle exec middleman build --clean
cp -R /opt/slate/build/* /var/www/docs

Funktioniert bei mir!

verwandte Informationen