Executando script Ruby através de php como www-data

Executando script Ruby através de php como www-data

Estou executando um aplicativo php em um servidor Apache. No aplicativo php, preciso executar um script Ruby na linha de comando. Verifiquei que executar o script diretamente de um terminal como userfunciona corretamente. O ambiente Ruby local useré configurado definindo uma variável de caminho e fonte /home/user/.rvm/scripts/rvmque permite ao script carregar os requisitos com requireinstruções.

Agora, através do aplicativo php, o script falha nessas instruções require e presumo que isso ocorre porque não há configuração de ambiente Ruby para o www-datausuário. Eu nunca usei Ruby antes e não tenho certeza de qual seria a maneira correta de configurar esse ambiente

Responder1

Eu fui capaz de descobrir isso. Postei a resposta à minha pergunta no SO. Espero que ajude!

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

Eu fui capaz de descobrir isso. Primeiro euRVM instaladocomo uma instalação multiusuário para garantir que a www-dataconta possa acessá-la.

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

Instale a versão Ruby desejada, no meu caso 2.3.1, e defina rvm para usá-la:

$ rvm install 2.3.1
$ rvm use 2.3.1

Execute gempara instalar todas as gemas necessárias. Como o rvm é uma instalação multiusuário, essas joias são armazenadas no sistema e não no seu usuário específico.

$ gem install packagename

Não sei se isso é necessário, mas fecharia a sessão SSH e a reabriria. rvm mexe com variáveis ​​de ambiente, então é melhor prevenir do que remediar.

Execute envpara imprimir todas as variáveis ​​de ambiente. printenvtambém funciona se envnão funcionar por algum motivo. Você obterá uma grande lista de tudo definido, você só precisa dos relacionados ao Ruby.Não copie/cole esses valores, eles são exemplos que retirei do meu sistema. O seu 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

Agora precisamos que o PHP reconheça essas variáveis. Você precisará encontrar o arquivo correto em seu sistema, o que pode ser complicado. Não tenho como saber qual é o correto, usei tentativa e erro.

O arquivo no meu sistema é /etc/php/5.6/fpm/pool.d/www.conf. Adicionar todosdas variáveis ​​de ambiente que você inseriu anteriormente neste arquivo com o formato abaixo. Observe que você PATHtambém precisa estar aqui!

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

Agora reinicie php-fpm. O nome do seu serviço pode ser diferente do meu; Estou usando a versão 5.6 de ondrej/php.

Ubuntu 15.04 e mais recente (systemd):

$ sudo systemctl restart php5.6-fpm

Ubuntu 14.10 e mais recente:

$ sudo service php5.6-fpm restart

Finalmente, no próprio script, você precisará cdacessar o diretório a partir do qual está executando o bundlecomando. Meu pequeno roteiro é 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 mim!

informação relacionada