为什么在 upstart 脚本中使用 setuid 时我的 RubyGems 环境不同?
Why is my RubyGems environment different when using setuid from an upstart script?
在 Ubuntu 从 Upstart 启动 Rails 应用程序时,我的 RubyGems 环境出错了。在我的 Upstart 脚本中,我使用 setuid www
,然后 运行 最终启动 Puma 的包装脚本。
从命令行,作为用户 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
如果我从 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
将输出预期的环境设置。
在 Ubuntu 从 Upstart 启动 Rails 应用程序时,我的 RubyGems 环境出错了。在我的 Upstart 脚本中,我使用 setuid www
,然后 运行 最终启动 Puma 的包装脚本。
从命令行,作为用户 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
如果我从 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
将输出预期的环境设置。