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

How to properly require any Ruby gem in an Apache CGI application?

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

#!/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 错误日志中显示错误:

/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

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

SetEnv LOAD_PATH "/home/my_username/.gem/ruby/2.2.0/gems/"
SetEnv GEM_PATH "/home/my_username/.gem/ruby/2.2.0/gems/" 

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

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

安装的 gem

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

sudo su - nobody
gem install peach

如果您不想为不同的用户处理不同的 gem,您可以随时使用 bundler