2

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

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

1 ответ1

0

Я смог понять это. Я разместил ответ на мой вопрос на 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 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 build из ondrej / 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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .