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