Ruby 使用Ansible安装Bundler gem
我正在尝试使用Ansible在我的VPS上安装Bundler 我已经设置了rbenv,全局ruby是2.1.0 如果我以root用户身份SSH到服务器中并运行Ruby 使用Ansible安装Bundler gem,ruby,ubuntu,rubygems,bundler,ansible,Ruby,Ubuntu,Rubygems,Bundler,Ansible,我正在尝试使用Ansible在我的VPS上安装Bundler 我已经设置了rbenv,全局ruby是2.1.0 如果我以root用户身份SSH到服务器中并运行gem install bundler,它将安装得非常完美 我已经尝试了以下三种使用Ansible安装Bundler gem的方法,这三种方法都没有产生错误,但是当我使用SSH并运行gem list时,Bundler就不见了 尝试1: --- - name: Install Bundler shell: gem install bund
gem install bundler
,它将安装得非常完美
我已经尝试了以下三种使用Ansible安装Bundler gem的方法,这三种方法都没有产生错误,但是当我使用SSH并运行gem list
时,Bundler就不见了
尝试1:
---
- name: Install Bundler
shell: gem install bundler
尝试2:
---
- name: Install Bundler
shell: gem install bundler
尝试3:
---
- name: Install Bundler
gem: name=bundler
state=latest
我还尝试了最后一次使用user\u install=yes
和user\u install=no
的尝试,两者都没有任何区别
有没有办法通过Ansible正确安装Bundler
我在这方面已经做了一段时间了,我已经安装了1个ruby版本:2.1.0,我发现rbenv的垫片目录不包含bundle
的垫片
捆绑
的垫片应该在那里吗?我只是弄不明白为什么capistrano在运行sudo gem list
时找不到bundle
命令,但在运行gem list
时却找不到
root@weepingangel:/usr/local/rbenv/shims# echo $PATH
/usr/local/rbenv/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
root@weepingangel:/usr/local/rbenv/shims# gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 2.2.0
- RUBY VERSION: 2.1.0 (2013-12-25 patchlevel 0) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/local/rbenv/versions/2.1.0/lib/ruby/gems/2.1.0
- RUBY EXECUTABLE: /usr/local/rbenv/versions/2.1.0/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/rbenv/versions/2.1.0/bin
- SPEC CACHE DIRECTORY: /root/.gem/specs
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/local/rbenv/versions/2.1.0/lib/ruby/gems/2.1.0
- /root/.gem/ruby/2.1.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- :sources => ["http://gems.rubyforge.org", "http://gems.github.com"]
- "gem" => "--no-ri --no-rdoc"
- REMOTE SOURCES:
- http://gems.rubyforge.org
- http://gems.github.com
- SHELL PATH:
- /usr/local/rbenv/versions/2.1.0/bin
- /usr/local/rbenv/libexec
- /usr/local/rbenv/shims
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /sbin
- /bin
- /usr/games
有什么想法吗
因此,我认为我有两个主要问题:
sudo gem list
时才可见root@weepingangel:/usr/local/rbenv/shims# echo $PATH
/usr/local/rbenv/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
root@weepingangel:/usr/local/rbenv/shims# gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 2.2.0
- RUBY VERSION: 2.1.0 (2013-12-25 patchlevel 0) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/local/rbenv/versions/2.1.0/lib/ruby/gems/2.1.0
- RUBY EXECUTABLE: /usr/local/rbenv/versions/2.1.0/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/rbenv/versions/2.1.0/bin
- SPEC CACHE DIRECTORY: /root/.gem/specs
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/local/rbenv/versions/2.1.0/lib/ruby/gems/2.1.0
- /root/.gem/ruby/2.1.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- :sources => ["http://gems.rubyforge.org", "http://gems.github.com"]
- "gem" => "--no-ri --no-rdoc"
- REMOTE SOURCES:
- http://gems.rubyforge.org
- http://gems.github.com
- SHELL PATH:
- /usr/local/rbenv/versions/2.1.0/bin
- /usr/local/rbenv/libexec
- /usr/local/rbenv/shims
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /sbin
- /bin
- /usr/games
INFO [18d5838c] Running /usr/bin/env bundle install --binstubs
/var/rails_apps/neiltonge/shared/bin --path
/var/rails_apps/neiltonge/shared/bundle --without development test
--deployment --quiet on 188.226.159.96 DEBUG [18d5838c] Command: cd /var/rails_apps/neiltonge/releases/20140301205432 && ( PATH=$PATH
/usr/bin/env bundle install --binstubs
/var/rails_apps/neiltonge/shared/bin --path
/var/rails_apps/neiltonge/shared/bundle --without development test
--deployment --quiet ) DEBUG [18d5838c] /usr/bin/env: bundle: No such file or directory
这是我的$PATH
:
/usr/local/rbenv/shims:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
为什么无法定位捆绑包?问题在于,通过ansible运行
gem install bundler
时,您没有正确初始化rbenv,因为rbenv init
是在.bashrc
或.bash\u profile
中运行的。因此,使用的gem
命令是系统命令,而不是作为rbenv垫片安装的命令。因此,无论何时安装gem,它都是在系统范围内安装的,而不是在rbenv环境中
要正确初始化rbenv,必须执行bash本身并明确声明它是一个登录shell,以便它读取其初始化文件:
ansible your_host -m command -a 'bash -lc "gem install bundler"' -u your_rbenv_user
如果您确实想以root用户身份执行此操作,请将-u部分保留为您的\u rbenv\u用户
如果上述命令起作用,您可以轻松地将其转换为剧本动作:
- name: Install Bundler
become_user: your_rbenv_user
command: bash -lc "gem install bundler"
这很麻烦,但这是我目前找到的唯一方法。当我尝试以另一个用户的身份运行命令时,我遇到了类似的环境问题。如本文所述,您有两个选项可以在登录shell中执行命令(这将加载用户环境)。例如,我想以rails用户身份安装bundler:
或
由于Ansible 1.3,以下本机解决方案是可能的:
- name: requirements for installing gems
apt:
name: {{ item }}
with_items:
- ruby
- ruby-dev
- make
- name: install gem with proper $PATH
gem:
name: xyz
user_install: no
提及user\u install
参数!此外,捆绑机安装的某些依赖项可能需要以下进一步的包依赖项:
- zlib1g开发
这对我来说很有效:
- name: rubygems | install bundler
shell: gem install bundler
- name: rbenv | rehash
shell: RBENV_ROOT={{ rbenv_root }} rbenv rehash
有时,在系统上安装了bundler之后,使用rbenv,您需要通过运行rbenv rehash
来更新$PATH
。我刚刚用ansible做了同样的尝试,结果成功了。重新安装后,Bundler在my$PATH
中可用。使用Ansible安装Bundler
最干净、最快捷的方法是:
只需使用角色并通过这样配置其插件安装rbenv
(显然,要配置的参数不仅仅是插件):
包含的插件rbenv default gems
将在默认情况下添加bundler
,并在ruby
版本的安装过程中添加到正确的目录中,您将获得SPCiefied
然后确保bundler
位于PATH
中
就是这样。我让它像这样工作:
-名称:安装jekyll和bundler
成为用户:鲍勃
宝石:
名称:“{{item}}”
环境:
GEM\u HOME:/HOME/bob/gems
路径:$PATH:/bin/:/usr/bin/:/home/bob/gems/bin
有以下项目:
-杰基尔
-捆扎机
用本地用户替换bob
然后使用与捆绑机模块相同的原理
-名称:安装Gems
成为用户:鲍勃
捆绑机:
gemfile:/home/bob/gemfile
国家:现在
环境:
- name: rubygems | install bundler
shell: gem install bundler
- name: rbenv | rehash
shell: RBENV_ROOT={{ rbenv_root }} rbenv rehash
rbenv_plugins:
- { name: 'ruby-build',
repo: 'https://github.com/rbenv/ruby-build.git',
version: master }
- { name: 'rbenv-default-gems',
repo: 'https://github.com/rbenv/rbenv-default-gems.git',
version: master }