Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
apache cgi脚本需要非核心ruby gems_Ruby_Apache_Gem - Fatal编程技术网

apache cgi脚本需要非核心ruby gems

apache cgi脚本需要非核心ruby gems,ruby,apache,gem,Ruby,Apache,Gem,我很难使用Apache和RVM设置Ruby CGI。我可以很好地执行需要核心gems的脚本,但我不能要求非核心gems,apache会生成一个错误。例如: #!/usr/bin/env /home/user/.rvm/rubies/ruby-2.1.0/bin/ruby require 'cgi' print "Content-type: text/html\n\n" print 'hello there' 这两个脚本在终端上都可以正常运行,但apache在第二个脚本上抛出了错误: [T

我很难使用Apache和RVM设置Ruby CGI。我可以很好地执行需要核心gems的脚本,但我不能要求非核心gems,apache会生成一个错误。例如:

#!/usr/bin/env /home/user/.rvm/rubies/ruby-2.1.0/bin/ruby

require 'cgi'
print "Content-type: text/html\n\n"
print 'hello there'


这两个脚本在终端上都可以正常运行,但apache在第二个脚本上抛出了错误:

[Tue Mar 25 20:53:13 2014][error][client 127.0.0.1]脚本头过早结束:main_index.rb /home/aaachilless/.rvm/rubies/ruby-2.1.0/lib/ruby/site\u ruby/2.1.0/rubygems/core\u ext/kernel\u require.rb:55:in
require]:无法加载此类文件--nokogiri(LoadError)from/home/aaachilless/.rvm/rubies/ruby-2.1.0/lib/ruby/site\u ruby/2.1.0/rubygems/core\u ext/kernel\u require.rb:55:in
require'from/home/aaachilless/Dropbox/aaachilless me/cgi/main\u index.rb:4:in`'

看起来像这个人 我也有同样的问题,但要求rubygems并不能解决我的问题


感谢您的帮助

rvm是针对每个用户应用的,因此您的(系统?部署?根?)用户需要在rvm启动时加载rvm,可能需要使用
/etc/profile.d/rvm.sh


查看中的“多用户安装”以获得指导。

我解决了同样的问题,因为我在shebang中的CLI上使用的版本是从RVM执行ruby包装器,而不仅仅是/usr/bin/ruby


#/usr/local/rvm/wrappers/ruby-2.1.2/ruby

我的用户作为Apache运行的用户?我不明白这怎么会是个问题。如果Apache没有加载RVM,那么我将无法运行任何CGI脚本。但是我只是无法运行需要非核心gems的CGI脚本。如果Apache没有加载rvm,那么它仍然可以使用系统ruby(如果有),因为您的脚本正在运行。我没有安装系统ruby。也就是说,如果我执行一个脚本,使用
printenv
打印Apache的路径,那么打印的路径不包含任何与ruby或rvm相关的内容。这个答案很可能来自您提供的信息。如果您尝试按指示运行
rvm.sh
,但不起作用,请发布错误消息等结果。其他可能的答案是:1。已加载rvm,但没有为apache用户安装rubies/gems;2.rvm已加载,但运行错误的ruby;3.rvm加载了正确的ruby,但加载了错误的gemset。像“必须加载rvm,对吗?”这样的假设可能会毁掉你的生活。更新:当我的cgi脚本中的shebang行指向系统安装的ruby时,我能够正确执行所有操作。每当shebang行指向安装了RVM的ruby时,该脚本将仅在不需要非核心gems时执行。这是否确认未加载RVM环境?Apache是以我安装RVM的用户的身份运行的。jimworm的回答没有真正的帮助。apache可以执行一些脚本,所以必须加载RVM,对吗?我甚至没有安装系统ruby。我将尝试使用suexec运行CGI,如果这不起作用,我将尝试卸载RVM,安装系统ruby,使用系统ruby运行CGI,如果不起作用,我将尝试安装RVM作为系统安装,如果不起作用,我将放弃成为web开发人员的所有希望和梦想。更新:使用RVM切换rubies会影响从终端运行的脚本,但当它们被apache执行时就不是了。apache正在以我的身份运行。我真的不想在系统范围内安装rvm,但我想我会试试,看看会发生什么。
#!/usr/bin/env /home/user/.rvm/rubies/ruby-2.1.0/bin/ruby

require 'cgi'
require 'nokogiri'

print "Content-type: text/html\n\n"
print 'hello there'