为了制作独立且可移植的ruby脚本,我使用bundler/inline
。
我配置此脚本的服务器非常具体,它们具有rbenv(因此我们可以回滚/使用多个ruby版本)以及安装某些gem(备份gem)的时间。我们使用全局ruby安装。
使用' bundle / inline'产生的脚本由非root用户执行抛出错误:
Your user account isn't allowed to install to the system Rubygems.
You can cancel this installation and run:
bundle install --path vendor/bundle
to install the gems into ./vendor/bundle/, or you can enter your password
and install the bundled gems to Rubygems using sudo.
可悲的是,bundler / inline没有选择将此作为参数。
所以我尝试通过设置捆绑路径来解决此问题:bundle config path ~/.gem/ruby/2.3.0/
,但这不起作用。 (我检查并正确保存了配置)
设置GEM_HOME=~/.gem/ruby/2.3.0/
确实有效。 (Ruby gems为这种情况支持两个gem home,所以这实际上工作正常)。唯一的问题是我需要做一些簿记,以保持环境变量与rbenv激活的ruby的次要版本一致。我无法从我的ruby脚本中设置这个ENV,我可以根据当前版本轻松计算出这个版本:
version_used_for_gem_home = RUBY_VERSION.gsub /\.\d+$/, '.0'
ENV['GEM_HOME'] = "/var/lib/postgresql/.gem/ruby/#{version_used_for_gem_home}/"
require 'bundler/inline'
有没有更好的解决方案,不要求我做任何簿记?我希望有一些rbenv钩子我可以用来修改路径/ gem home ...
答案 0 :(得分:0)
我们遇到了同样的问题,我发现这就是诀窍
require 'bundler/inline'
require 'bundler'
Bundler.configure # where the magic happens
# passing true here does the install; in real scripts we
# pass a boolean based on a --install flag.
gemfile(true) do
...gems go here...
end
您需要明确调用Bundler.configure
以使其读取您的包配置,并正确设置路径。