我有多个用户在同一系统上使用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的权限。
还有哪些原因可以解释这种差异?
感谢。
答案 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转移到用户主目录。