ruby - 如何在 Uberspace 上使用 Ruby CGI 脚本
问题描述
我想在 Uberspace 7 上使用 Ruby CGI 脚本,但在权限和安全设置方面遇到了一些问题,尤其是在使用 gems 时。如何使用自定义 gem 安装 CGI 脚本?
解决方案
首先,请注意 Uberspace 7 在 SELinux 上运行。这意味着 CGI 脚本文件~/html/
不仅必须是可执行的,而且还需要正确的 SELinux 上下文。在这种情况下,类型必须是httpd_sys_content_t
。
您可以使用以下命令查看 SELinux 上下文ls -lZ
:
$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
如果某些文件的上下文错误,可以使用restorecon
命令恢复上下文,例如restorecon -R ~/html/
.
Ruby gems 的用户安装目录是~/.gem/
. 在 Uberspace 上,gem install
默认安装到该目录:
$ cat /etc/gemrc
gem: --no-document --user-install
由于 apache 进程无法访问主目录,因此无法从 CGI 脚本执行安装在那里的 gem。/var/www/virtual/$USER/gem
您可以改为安装 gems ,创建目录
$ mkdir /var/www/virtual/$USER/gem
您不能直接使用--install-dir
参数,gem install
因为这与上面提到的默认参数冲突:
$ gem install mygem --install-dir /var/www/virtual/$USER/gem
ERROR: Use --install-dir or --user-install but not both
相反,~/.gemrc
使用以下内容创建以覆盖默认参数(替换<USERNAME>
为您的实际用户名):
gem: --install-dir /var/www/virtual/<USERNAME>/gem
现在 gems 的安装应该可以工作了:
$ gem install mygem
要在 CGI 脚本中使用 gems,请Gem.paths
在需要 gems 之前设置变量:
#!/usr/bin/ruby
Gem.paths = { 'GEM_PATH' => '/var/www/virtual/<USERNAME>/gem' }
require 'mygem'
(... rest of the script)
这是必需的,因为我们无法修改GEM_PATH
apache 进程的环境变量(即 set )。
推荐阅读
- google-analytics - 谷歌分析 - 地理
- python - 并发 DNS 查询(Python3 concurrent.futures)消耗过多的 RAM(40GB+)
- python - 使用python保存.xlsx文件时保持相同的文件格式
- linker - objcopy 创建的对象文件不兼容
- git - Ignored files in Git would be overwritten by merge
- amazon-web-services - 如何禁用“aws s3 同步”的分段上传以防止元数据丢失
- javascript - 汇总数组的对象
- css - CSS图像线性渐变封面图片
- javascript - Javascript - 从 url 中的文件名中删除后缀
- c# - Hololens TCP 套接字 - 到 Hololens 服务器的 Python 客户端