'bundle show'根据用户的不同路径生成,但在同一系统和Gemfile.lock上

时间:2013-05-14 18:41:26

标签: ruby git bundler runtime-error

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

现在,除了一个用户'cd app之外的所有人; 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的权限。

还有哪些原因可以解释这种差异?

感谢。

1 个答案:

答案 0 :(得分: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转移到用户主目录。