PHP를 통해 www-data로 Ruby 스크립트 실행

PHP를 통해 www-data로 Ruby 스크립트 실행

아파치 서버에서 PHP 애플리케이션을 실행하고 있습니다. PHP 애플리케이션의 명령줄에서 Ruby 스크립트를 실행해야 합니다. 터미널에서 직접 스크립트를 실행하여 제대로 작동하는지 확인했습니다 user. 의 로컬 Ruby 환경은 user경로 변수를 설정하고 /home/user/.rvm/scripts/rvm스크립트가 명령문을 통해 요구 사항을 로드할 수 있도록 하는 소싱을 통해 설정됩니다 require.

이제 PHP 애플리케이션을 통해 스크립트는 이러한 require 문에서 실패하며 이는 사용자를 위한 Ruby 환경 설정이 없기 때문이라고 가정합니다 www-data. 나는 이전에 Ruby를 사용해 본 적이 없으며 해당 환경을 설정하는 올바른 방법이 무엇인지 잘 모르겠습니다.

답변1

나는 이것을 알아낼 수 있었다. 내 질문에 대한 답변을 SO에 게시했습니다. 도움이 되길 바랍니다!

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

나는 이것을 알아낼 수 있었다. 첫번째로 나는설치된 RVM다중 사용자 설치로 계정 www-data이 액세스할 수 있도록 합니다.

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

원하는 Ruby 버전(제 경우에는 2.3.1)을 설치한 다음 이를 사용하도록 rvm을 설정합니다.

$ rvm install 2.3.1
$ rvm use 2.3.1

gem필요한 보석을 설치하려면 실행하세요 . rvm은 다중 사용자 설치이기 때문에 이러한 gem은 특정 사용자가 아닌 시스템에 저장됩니다.

$ gem install packagename

이것이 필요한지는 모르겠지만 SSH 세션을 닫았다가 다시 열겠습니다. rvm은 환경 변수를 망쳐 놓기 때문에 미안한 것보다 안전합니다.

env모든 환경 변수를 인쇄하려면 실행하세요 . 어떤 이유로 작동하지 않는 printenv경우에도 작동합니다 . env설정된 모든 항목의 큰 목록을 얻게 되며, 루비 관련 항목만 필요합니다.이 값은 복사/붙여넣기하지 마세요. 이는 제가 시스템에서 가져온 예시입니다. 당신의 것은 다를 것입니다!

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

이제 이러한 변수를 인식하려면 PHP가 필요합니다. 시스템에서 올바른 파일을 찾아야 하는데 이는 까다로울 수 있습니다. 어느 것이 맞는지 알 수 있는 방법이 없어서 시행착오를 겪었습니다.

내 시스템의 파일은 /etc/php/5.6/fpm/pool.d/www.conf. 추가하다 모두이전에 아래 형식으로 이 파일에 가져온 환경 변수입니다. PATH여기에도 필요하다는 점에 유의하세요 !

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

이제 다시 시작하세요 php-fpm. 귀하의 서비스 이름은 내 서비스 이름과 다를 수 있습니다. 저는 5.6 빌드를 사용하고 있습니다. 온드레이/php.

Ubuntu 15.04 이상(시스템):

$ sudo systemctl restart php5.6-fpm

우분투 14.10 이상:

$ sudo service php5.6-fpm restart

cd마지막으로 스크립트 자체에서 명령을 실행 중인 디렉터리로 이동 해야 합니다 bundle. 내 짧은 스크립트는 다음과 같습니다.

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

나에게 효과적입니다!

관련 정보