2

我尝试从 PHP 运行我的 ruby​​ 脚本。当我从命令行运行它时没问题,但是当我从 PHP 代码运行它时,我不能使用 gems。

这是我的 PHP 脚本

$rubyBin = '/usr/local/rvm/rubies/ruby-2.1.1/bin/ruby';
echo (shell_exec("$rubyBin server.rb 2>&1"));

这是来自服务器的响应

file exists/usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- pivotal-tracker (LoadError)
    from /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from server.rb:5:in `<main>'

但要求'rubygems'运行正常

4

1 回答 1

0

输出显示您的环境正在使用 Ruby 版本管理器 (rvm)。您的 PHP 环境可能使用与命令行环境不同的 Ruby 版本和/或 Gemset。

解决方案是通过发出如下命令将 Ruby 脚本包装在 RVM 包装器中:

rvm 包装器 2.1.1@commandline_gemet php server.rb

确保指定正确的 Ruby 版本(参见 rvm 列表)、Gemset(参见 rvm gemset 列表)和 server.rb 的路径 这会在 /usr/local/rvm/bin 中创建一个 php_server 可执行文件。包装器为您的脚本准备请求的 Ruby 环境,因此如果您从 PHP 脚本调用它,一切都应该按预期工作。

于 2014-10-05T19:09:15.957 回答