我正在尝试使用Ansible在我的VPS上安装Bundler。
我已经设置了rbenv,全局红宝石是2.1.0。
如果我以root用户身份SSH进入服务器并运行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_install=yes
和的最后一次尝试,user_install=no
但都没有任何区别。
关于如何通过Ansible正确安装Bundler的任何想法?
我已经为此工作了一段时间,并且安装了1个ruby版本:2.1.0和ahve发现rbenv的shims目录不包含shim bundle
。
bundle
那里应该有垫片吗?我刚开始困惑,为什么Capistrano的找不到bundle
,因为当我运行的上市命令sudo gem list
而不是当我运行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
?
我的部署说:
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
为什么找不到捆绑包?
问题是,gem install bundler
通过ansible运行时,由于rbenv init
是在.bashrc
或中运行,因此无法正确初始化rbenv .bash_profile
。因此,gem
使用的命令是系统命令,而不是作为rbenv填充程序安装的命令。因此,无论何时安装gem,它都将在系统范围内安装,而不是在rbenv环境中安装。
为了正确初始化rbenv,您必须执行bash本身并明确声明它是一个登录shell,因此它会读取它的初始化文件:
ansible your_host -m command -a 'bash -lc "gem install bundler"' -u your_rbenv_user
-u your_rbenv_user
如果您确实想以root用户身份执行此操作,请保留该部分。
如果上述命令有效,则可以轻松地将其转换为剧本操作:
- name: Install Bundler
become_user: your_rbenv_user
command: bash -lc "gem install bundler"
这很麻烦,但这是我到目前为止发现的唯一方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句