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 user
funciona correctamente. El entorno Ruby local user
se configura estableciendo una variable de ruta y un abastecimiento /home/user/.rvm/scripts/rvm
que permite al script cargar los requisitos con require
declaraciones.
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-data
usuario. 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-data
cuenta 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
gem
para 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
env
para imprimir todas las variables de entorno.printenv
También funciona sienv
no 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ÚPATH
tambié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
cd
al directorio desde el que estás ejecutando elbundle
comando. 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!