Запуск скрипта ruby ​​через php как www-data

Запуск скрипта ruby ​​через php как www-data

Я запускаю приложение php на сервере apache. Из приложения php мне нужно запустить скрипт ruby ​​в командной строке. Я проверил, что запуск скрипта напрямую из терминала как user, работает правильно. Локальная среда ruby ​​для userнастраивается путем установки переменной path и источника, /home/user/.rvm/scripts/rvmчто позволяет скрипту загружать требования с помощью requireоператоров.

Теперь через приложение php скрипт терпит неудачу в этих операторах require, и я предполагаю, что это происходит из-за того, что для пользователя не настроена среда ruby www-data. Я никогда раньше не использовал ruby ​​и не уверен, как правильно настроить эту среду

решение1

Я смог разобраться. Я разместил ответ на свой вопрос на SO. Надеюсь, это поможет!

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

Я смог это выяснить. Во-первых, яустановленный рвмкак многопользовательскую установку, чтобы гарантировать 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, чтобы установить все необходимые gems. Поскольку rvm — многопользовательская установка, эти gems хранятся в системе, а не у вашего конкретного пользователя.

$ gem install packagename

Не знаю, необходимо ли это, но я бы закрыл сеанс SSH и открыл его заново. rvm портит переменные среды, так что лучше перестраховаться, чем потом сожалеть.

Запустите env, чтобы вывести все переменные окружения. printenvтакже работает, если envпо какой-то причине не работает. Вы получите большой список всего установленного, вам нужны только те, которые связаны с Ruby.Не копируйте/не вставляйте эти значения, это примеры, которые я взял из своей системы. У вас они будут другими!

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 и новее (systemd):

$ sudo systemctl restart php5.6-fpm

Ubuntu 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

Работает для меня!

Связанный контент