如何从 PHP 脚本 运行 捆绑
How to run bundle from PHP script
我正在编写一个 webhook,以便在我推送到 GitHub 时自动发布网站。部分流程要求我使用
构建网站
bundle exec middleman build --clean
我正在尝试使用 PHP 脚本调用它,该脚本由 GitHub webhook 调用,因此用户是 www-data
。但是,无论我尝试什么,我都会收到无法找到 bundle
的错误。
如何从 PHP 脚本 运行 执行 bundle
命令?
我想通了。首先,我installed 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
安装任何需要的 gem。因为 rvm 是多用户安装,所以这些 gem 存储到系统而不是您的特定用户。
$ gem install packagename
我不知道这是否有必要,但我会关闭 SSH 会话并重新打开它。 rvm 与环境变量混淆,所以安全总比抱歉好。
运行 env
打印所有环境变量。如果 env
由于某种原因无效,printenv
也有效。你会得到一个包含所有设置的大列表,你只需要 ruby 相关的。 不要copy/paste这些值,它们是我从系统中提取的示例。你的会不一样!
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
。使用以下格式将您之前抓取的 all 环境变量添加到此文件中。请注意,您在这里也需要 PATH
!
env[rvm_path] = /usr/local/rvm
env[rvm_prefix] = /usr/local
现在重新启动 php-fpm
。您的服务名称可能与我的不同;我正在使用 ondrej/php.
的 5.6 版本
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
适合我!
我正在编写一个 webhook,以便在我推送到 GitHub 时自动发布网站。部分流程要求我使用
构建网站bundle exec middleman build --clean
我正在尝试使用 PHP 脚本调用它,该脚本由 GitHub webhook 调用,因此用户是 www-data
。但是,无论我尝试什么,我都会收到无法找到 bundle
的错误。
如何从 PHP 脚本 运行 执行 bundle
命令?
我想通了。首先,我installed 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
安装任何需要的 gem。因为 rvm 是多用户安装,所以这些 gem 存储到系统而不是您的特定用户。
$ gem install packagename
我不知道这是否有必要,但我会关闭 SSH 会话并重新打开它。 rvm 与环境变量混淆,所以安全总比抱歉好。
运行 env
打印所有环境变量。如果 env
由于某种原因无效,printenv
也有效。你会得到一个包含所有设置的大列表,你只需要 ruby 相关的。 不要copy/paste这些值,它们是我从系统中提取的示例。你的会不一样!
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
。使用以下格式将您之前抓取的 all 环境变量添加到此文件中。请注意,您在这里也需要 PATH
!
env[rvm_path] = /usr/local/rvm
env[rvm_prefix] = /usr/local
现在重新启动 php-fpm
。您的服务名称可能与我的不同;我正在使用 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
适合我!