Ejecutar script de ruby ​​a través de php como www-data


2

Estoy ejecutando una aplicación php en un servidor apache. Desde la aplicación php, necesito ejecutar un script ruby ​​en la línea de comando. He verificado que ejecutar el script directamente desde un terminal como userfunciona correctamente. El entorno local de ruby userse configura estableciendo una variable de ruta y fuente /home/user/.rvm/scripts/rvmque permite que el script cargue los requisitos con requiredeclaraciones.

Ahora, a través de la aplicación php, el script falla en estas declaraciones requeridas y supongo que esto se debe a que no hay una configuración de entorno ruby ​​para el www-datausuario. Nunca he usado ruby ​​antes y no estoy seguro de cuál sería la forma correcta de establecer ese entorno

Respuestas:


0

Pude resolver esto. Publiqué la respuesta a mi pregunta en SO. ¡Espero eso ayude!

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

Pude resolver esto. Primero, instalé rvm como una instalación multiusuario para asegurar que la www-datacuenta pueda acceder a ella.

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

Instale la versión ruby ​​deseada, en mi caso 2.3.1, luego configure rvm para usarla:

$ rvm install 2.3.1
$ rvm use 2.3.1

Ejecute gempara instalar las gemas que sean necesarias. Debido a que rvm es una instalación multiusuario, estas gemas se almacenan en el sistema y no en su usuario específico.

$ gem install packagename

No sé si esto es necesario, pero cerraría la sesión SSH y la volvería a abrir. rvm se mete con las variables de entorno, por lo que es mejor prevenir que curar.

Ejecute envpara imprimir todas las variables de entorno. printenvTambién funciona si envno por alguna razón. Obtendrá una gran lista de todo lo establecido, solo necesita los relacionados con el rubí. No copie / pegue estos valores, son ejemplos que extraje de mi sistema. ¡El tuyo será diferente!

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

Ahora necesitamos PHP para reconocer estas variables. Tendrá que encontrar el archivo correcto en su sistema, lo que puede ser complicado. No tengo forma de saber cuál es el correcto, utilicé prueba y error.

El archivo en mi sistema es /etc/php/5.6/fpm/pool.d/www.conf. Agregue todas las variables de entorno que capturó previamente en este archivo con el siguiente formato. Tenga en cuenta que usted también necesita PATHaquí.

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

Ahora reinicia php-fpm. El nombre de su servicio puede ser diferente al mío; Estoy usando la compilación 5.6 de ondrej / php .

Ubuntu 15.04 y más reciente (systemd):

$ sudo systemctl restart php5.6-fpm

Ubuntu 14.10 y más reciente:

$ sudo service php5.6-fpm restart

Finalmente, en el script en sí, necesitará ir cdal directorio desde el que ejecuta el bundlecomando. Mi guión corto es este:

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

¡Funciona para mi!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.