Я пишу webhook для автоматической публикации сайта, когда я нажимаю на GitHub. Часть процесса требует, чтобы я создал сайт с
bundle exec middleman build --clean
Я пытаюсь вызвать это с помощью сценария PHP, сценария, вызываемого веб-крючком GitHub, поэтому пользователь www-data
, Независимо от того, что я пытаюсь, однако, я получаю сообщение об ошибке bundle
не может быть найден.
Как я могу запустить bundle
команда из сценария PHP?
Я смог понять это. Сперва я установлен рвм в качестве многопользовательской установки, чтобы обеспечить 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 сборки из Ондрей / 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
Работает для меня!
Других решений пока нет …