如何正确地要求Apache CGI应用程序中的任何Ruby gem?

时间:2015-06-21 20:13:26

标签: ruby apache gem cgi require

当我需要任何gem时,我的Ruby CGI脚本不起作用。我想在我的应用程序中使用“peach”gem,它是由“gem install peach”安装的,但是我以root身份安装它。我的测试应用程序,名为“gemtest”:

<% @reviews.each do | review | %>
  <%= review.title %>
  <%= review.content %>
<% end %>

它总是在apache错误日志中出现错误:

#!/usr/bin/ruby

require "cgi"
require "peach"

cgi=CGI.new(:accept_charset => "UTF-8")

puts "Content type: text/plain; charset: 'UTF-8'"
puts
puts "It Works!"

我还尝试在Apache的httpd.conf文件中使用指令“SetEnv”设置LOAD_PATH和GEM_PATH环境变量,并且我总是重新启动Apache守护程序:

/usr/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
cannot load such file -- peach
(
LoadError
)
\tfrom /usr/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
\tfrom /opt/lampp/cgi-bin/gemtest:6:in `<main>'
End of script output before headers: gemtest

但我没有成功。如何在运行简单的CGI应用程序时正确地要求任何gem?

1 个答案:

答案 0 :(得分:1)

问题是,尝试加载gem的用户很可能无法访问为您的用户名安装的gem

检查在apache配置中加载apache服务的用户名,很可能是nobody用户,并为该用户安装gem

function RemoveDirectory($direct)
{
    foreach(glob("{$direct}/*") as $file)
    {
        if(is_dir($file)) { 
            RemoveDirectory($file);
        } else {
            unlink($file);
        }
    }
    rmdir($direct);
}

如果您不想为不同的用户处理不同的宝石,您可以随时使用捆绑器