Ejecutando el script Ruby a través de PHP como www-data

Ejecutando el script Ruby a través de PHP como www-data

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 una terminal userfunciona correctamente. El entorno Ruby local userse configura estableciendo una variable de ruta y un abastecimiento /home/user/.rvm/scripts/rvmque permite al script cargar 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 del entorno Ruby para el www-datausuario. Nunca he usado Ruby antes y no estoy seguro de cuál sería la forma correcta de configurar ese entorno.

Respuesta1

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

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

Pude resolver esto. Primero yorvm instaladocomo una instalación multiusuario para garantizar que la www-datacuenta pueda acceder a ella.

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

Instale la versión de 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, así que más vale prevenir que curar.

Ejecute envpara imprimir todas las variables de entorno. printenvTambién funciona si envno funciona por alguna razón. Obtendrás una gran lista de todo lo configurado, solo necesitas los relacionados con Ruby.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. Necesitará encontrar el archivo correcto en su sistema, lo cual puede resultar complicado. No tengo forma de saber cuál es la correcta, utilicé prueba y error.

El archivo en mi sistema es /etc/php/5.6/fpm/pool.d/www.conf. Agregar todode las variables de entorno que previamente grabó en este archivo con el siguiente formato. ¡Ten en cuenta que TÚ PATHtambién necesitas estar aquí!

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 versión 5.6 de ondrej/php.

Ubuntu 15.04 y posteriores (systemd):

$ sudo systemctl restart php5.6-fpm

Ubuntu 14.10 y más reciente:

$ sudo service php5.6-fpm restart

Finalmente, en el propio script deberás acceder cdal directorio desde el que estás ejecutando 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!

información relacionada