通过 php 运行 ruby​​ 脚本作为 www-data

通过 php 运行 ruby​​ 脚本作为 www-data

我在 apache 服务器上运行 php 应用程序。我需要从 php 应用程序在命令行上运行 ruby​​ 脚本。我已验证直接从终端以 运行脚本可以正常工作。通过设置路径变量和来源来设置user本地 ruby​​ 环境,这允许脚本使用语句加载需求。user/home/user/.rvm/scripts/rvmrequire

现在,通过 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以安装所需的任何 gem。由于 rvm 是多用户安装,因此这些 gem 存储在系统中,而不是您的特定用户中。

$ gem install packagename

我不知道这是否有必要,但我会关闭 SSH 会话并重新打开它。rvm 会弄乱环境变量,所以谨慎为好。

运行env以打印所有环境变量。如果出于某种原因不起作用,printenv也会起作用 。您将获得所有设置的大列表,您只需要与 ruby​​ 相关的设置。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 版本 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

对我有用!

相关内容