ruby-on-rails - 为什么从新贵脚本中使用 setuid 时我的 RubyGems 环境会有所不同?
问题描述
在 Ubuntu 上从 Upstart 启动 Rails 应用程序时,我的 RubyGems 环境出现问题。在我使用的 Upstart 脚本setuid www
中,然后运行最终启动 Puma 的包装脚本。
从命令行,作为 user www
,输出gem env
是我所期望的:
- GEM PATHS:
- /var/lib/gems/2.5.0
- /home/www/.gem/ruby/2.5.0
- /usr/share/rubygems-integration/2.5.0
- /usr/share/rubygems-integration/all
如果我gem env
从 Upstart 脚本运行,在设置之后setuid www
,我会得到:
- GEM PATHS:
- /var/lib/gems/2.5.0
- /.gem/ruby/2.5.0
- /usr/share/ruby
这会导致 gem 安装在错误的位置,或者因为安装时--user-install
将它们放入/home/www/.gem/
.
现在,我可以显式设置$GEM_HOME
,$GEM_PATH
但只依赖www
用户的默认 RubyGems 环境会更干净。
解决方案
问题是$HOME
没有在 Upstart 脚本中设置;)
添加env HOME=/home/www
到 upstart 脚本中,gem env
将输出预期的环境设置。
推荐阅读
- regex - 使用正则表达式将 Maya ASCII 命令拆分为片段
- javascript - 错误类型错误:无法读取 newsletter.component.ts.NewsletterComponent.subscribeNewsletter 未定义的属性“subscribeNewsletter”
- html - 水平卡片并排html引导
- java - @PostConstruct 和 @PreDestroy 注释不起作用
- ruby-on-rails - 未使用 Twilio 和 Rails 发送 SMS 消息
- curl - 卷曲响应上的 Windows cmd jq 不起作用
- python - 将熊猫多列转换为字典
- visual-studio-code - 如何在 VSCode 中正确着色 HTML 标签
- c - 如何将 NULL 作为参数传递到我的程序中?
- tabulator - 制表符没有找到匹配选择器的元素