0

我有多个用户在同一系统上使用 CLI 应用程序。为了使用未发布的补丁,Gemfile 指向 grit gem 的 github 上的特定提交。该应用程序有一个 Gemfile.lock。所有用户都设置了相同的 $GEM_HOME 和 $GEM_PATH 位置。

现在,除了一个用户的“cd 应用程序”之外的所有用户;bundle show grit' 显示像这样的路径 '$GEM_HOME/bundler/gems/grit-35b71d599549' (因为我运行了 bundle install 而存在)。但是对于奇怪的球,'cd app; bundle show grit' 显示这样的路径 '/nfs/home_dirs/odd-ball/.bundler/ruby/2.0.0/grit-35b71d599549' (不存在)。为该用户引发了 Bundler::GitError。

我已经寻找 $BUNDLE_* 环境变量和 ~/.bundle* 配置。我还验证了他对 $GEM_HOME/bundler/gems 具有权限。

还有什么其他原因可以解释这种差异?

谢谢。

4

1 回答 1

0

我挖掘并发现它归结为这个个人用户的文件权限。具体来说,在 Bundler.requires_sudo? 中:

def requires_sudo?
  ...
    # if any directory is not writable, we need sudo
    dirs = [path, bin_dir] | Dir[path.join('*')]
    sudo_needed = dirs.find{|d| !File.writable?(d) }
  ...
end

此用户不在允许写入“#{path}/lib”的组中。我假设当Bundler.requires_sudo?返回 true,bundler 会将 install_path 转移到用户的主目录。

于 2013-05-16T18:21:27.753 回答