Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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
如何在Uberspace上使用Ruby CGI脚本_Ruby_Rubygems_Cgi_Uberspace - Fatal编程技术网

如何在Uberspace上使用Ruby CGI脚本

如何在Uberspace上使用Ruby CGI脚本,ruby,rubygems,cgi,uberspace,Ruby,Rubygems,Cgi,Uberspace,我想在Uberspace 7上使用Ruby CGI脚本,但在权限和安全设置方面遇到了一些问题,特别是在使用gems时。如何使用自定义gems安装CGI脚本?首先,请注意Uberspace 7在SELinux上运行。这意味着~/html/中的CGI脚本文件不仅必须是可执行的,而且还需要正确的SELinux上下文。在这种情况下,类型必须是httpd\u sys\u content\t 您可以使用ls-lZ查看SELinux上下文: 如果某些文件的上下文错误,可以使用restorecon命令恢复上下文

我想在Uberspace 7上使用Ruby CGI脚本,但在权限和安全设置方面遇到了一些问题,特别是在使用gems时。如何使用自定义gems安装CGI脚本?

首先,请注意Uberspace 7在SELinux上运行。这意味着~/html/中的CGI脚本文件不仅必须是可执行的,而且还需要正确的SELinux上下文。在这种情况下,类型必须是httpd\u sys\u content\t

您可以使用ls-lZ查看SELinux上下文:

如果某些文件的上下文错误,可以使用restorecon命令恢复上下文,例如restorecon-R~/html/

Ruby gems的用户安装目录是~/.gem/。在Uberspace上,默认情况下,gem install会安装到该目录中:

$ cat /etc/gemrc
gem: --no-document --user-install
由于apache进程无法访问主目录,因此无法从CGI脚本执行安装在那里的gems。您可以在/var/www/virtual/$USER/gem中安装gems,而是使用

$ mkdir /var/www/virtual/$USER/gem
无法直接为gem install使用-install dir参数,因为这与上面提到的默认参数冲突:

$ gem install mygem --install-dir /var/www/virtual/$USER/gem
ERROR:  Use --install-dir or --user-install but not both
相反,使用以下内容创建~/.gemrc以覆盖默认参数,并替换为实际用户名:

gem: --install-dir /var/www/virtual/<USERNAME>/gem
要在CGI脚本中使用gems,请在需要gems之前设置Gem.path变量:

#!/usr/bin/ruby

Gem.paths = { 'GEM_PATH' => '/var/www/virtual/<USERNAME>/gem' }

require 'mygem'

(... rest of the script)

这是必需的,因为我们无法修改环境变量,即为apache进程设置GEM_路径。

我刚刚随机选择了一个GEM,用于另一个项目。当然,rack在这里没有意义,所以我更新了回复。我有时使用CGI进行快速测试/原型。在几秒钟内在Web服务器上安装一个功能脚本在2018年也很有用。这正是这样做的好处。因为这是一个机架式应用程序,所以您可以使用任何机架式应用程序并直接与其接口。CGI非常非常慢,因为它每次都要启动一个新的进程。
$ gem install mygem
#!/usr/bin/ruby

Gem.paths = { 'GEM_PATH' => '/var/www/virtual/<USERNAME>/gem' }

require 'mygem'

(... rest of the script)