首页 > 解决方案 > 为什么从新贵脚本中使用 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 环境会更干净。

标签: ruby-on-railsrubyupstart

解决方案


问题是$HOME没有在 Upstart 脚本中设置;)

添加env HOME=/home/www到 upstart 脚本中,gem env将输出预期的环境设置。


推荐阅读