为什么在 upstart 脚本中使用 setuid 时我的 RubyGems 环境不同?

Why is my RubyGems environment different when using setuid from an upstart script?

在 Ubuntu 从 Upstart 启动 Rails 应用程序时,我的 RubyGems 环境出错了。在我的 Upstart 脚本中,我使用 setuid www,然后 运行 最终启动 Puma 的包装脚本。

从命令行,作为用户 wwwgem 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

如果我从 Upstart 脚本 运行 gem env 设置 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 将输出预期的环境设置。