我们使用RVM来管理 Ruby 安装和环境。
通常我们使用这个.rvmrc
脚本:
#!/bin/bash
if [ ! -e '.version' ]; then
VERSION=`pwd | sed 's/[a-z/-]//g'`
echo $VERSION > .version
rvm gemset create $VERSION
fi
VERSION=`cat .version`
rvm use 1.9.2@$VERSION
Run Code Online (Sandbox Code Playgroud)
该脚本强制 RVM 为我们的每个项目/版本创建新的 gem 环境。
但是每次我们部署新版本时,RVM 都会要求我们确认新 .rvmrc
文件。
当我们cd
第一次进入这个目录时,我们会得到类似的信息:
================================================== ============== = 注意:= ================================================== ============== = RVM 在 = 中遇到了一个尚未信任的 .rvmrc 文件 = 当前工作目录,其中可能包含讨厌的代码。= = = = 检查此文件的内容以确保内容 = = 在信任它之前是好的!= = = = 阅读完文件后按“q”退出阅读器 = ================================================== ============== (准备好后按回车继续)
这对开发环境来说并没有那么糟糕,但是对于自动部署,它需要手动确认每台服务器上的每个新版本。
是否可以跳过此确认?
在系统范围的 RVM 中......这是我的 /etc/gemrc
---
gem:--no-ri --no-rdoc
Run Code Online (Sandbox Code Playgroud)
这是系统 gem env
GEM PATHS:
- /usr/lib/ruby/gems/1.9.1
- /home/${USER}/.gem/ruby/1.9.1
GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- "gem" => "--no-ri --no-rdoc"
Run Code Online (Sandbox Code Playgroud)
这是 rvm 中的那个
GEM PATHS:
- /usr/local/rvm/gems/ruby-1.9.2-p180
- /usr/local/rvm/gems/ruby-1.9.2-p180@global
GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
Run Code Online (Sandbox Code Playgroud)
和 rvm @global
GEM PATHS:
- …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在基于 centos 的 vagrant 盒子上安装带有 ansible 的 rvm。
我正在运行的命令是:
vars:
user: "foo"
- name: install rvm
action: command sudo -u $user bash /home/$user/rvm-install.sh stable creates=$home/.rvm
Run Code Online (Sandbox Code Playgroud)
它几乎有效,但 Ansible 认为它失败了。
Ansible 输出是:
failed: [127.0.0.1] => {"changed": true, "cmd": ["sudo", "-u", "foo", "bash", "/home/foo/rvm-install.sh", "stable"], "delta": "0:00:21.102322", "end": "2012-10-09 12:33:19.917874", "rc": 1, "start": "2012-10-09 12:32:58.815552"}
stderr: % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1081k 100 1081k 0 0 54170 0 0:00:20 …
Run Code Online (Sandbox Code Playgroud) 我正在使用 EC2,有时会启动我只想使用很短时间的服务器。通常我想在它们上安装某个或多个版本的 Ruby,对于这个 RVM 来说非常方便——如果不是因为编译 Ruby 需要很长时间。当剩下的服务器设置在几分钟内完成时,只需要等待近半个小时来编译 Ruby 真的很无聊。它完全扼杀了云计算体验。
有没有办法获得 RVM 的便利,而无需为我启动的每个新服务器编译每个 Ruby 版本?我可以预编译一个 Ruby 版本并将其保存在某个可访问的地方,然后让 RVM 使用它而不是从源代码编译它吗?我可以在安装 Ruby 版本后简单地将某个目录归档到 RVM 根目录下,将其保存在某处,然后将其解压缩到我启动的下一个服务器上的正确位置吗?在这种情况下,我需要保留哪些文件和目录?
我想使用 RVM 不仅是为了能够在 Ruby 版本之间切换,还因为它允许我为不同的应用程序保留单独的 gemset,所以不使用 RVM 会非常不方便。
所有服务器都具有相同的操作系统和架构,Ubuntu 10.04,32 位。
在rvm
CentOS 5.8 上安装后:
[rails@localhost ~]$ rvm -v
rvm 1.16.17
[rails@localhost ~]$ which ruby
~/.rvm/rubies/ruby-1.9.3-p286/bin/ruby
[rails@localhost ~]$ ruby -v
ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]
[rails@localhost ~]$ which gem
~/.rvm/rubies/ruby-1.9.3-p286/bin/gem
Run Code Online (Sandbox Code Playgroud)
有一个警告:
$ gem -v
/home/rails/.rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
1.8.24
Run Code Online (Sandbox Code Playgroud)
我遵循了一些建议:
$ rvm pkg install libyaml
Fetching yaml-0.1.4.tar.gz to /home/rails/.rvm/archives
Extracting yaml-0.1.4.tar.gz to /home/rails/.rvm/src
Prepare yaml in …
Run Code Online (Sandbox Code Playgroud) 我将 Ubuntu 12.04 用于 salt-master 和 salt-minion。当我尝试使用 salt 在 salt-minion 中安装软件包时,它仅安装在特定系统中。但我需要安装在特定用户中。如何为 salt-minion 中的特定用户安装 RVM 和 RUBY?
我正在尝试在带有 cPanel 的服务器上升级 ruby 和 rails gem,为此我安装了 rvm 并成功安装了不同版本的 ruby ......很棒的东西!
但是有一个问题,服务器似乎忽略了要使用的 gemset。安装 1.9.2 的新副本后,我仍然得到相同的 gem 列表,并且 GEM_PATH/GEMHOME 是相同的:
$>gem env
RubyGems Environment:
– RUBYGEMS VERSION: 1.8.15
– RUBY VERSION: 1.9.2 (2011-07-09 patchlevel 290) [x86_64-linux]
– INSTALLATION DIRECTORY: /home/ruby/ruby/gems
– RUBY EXECUTABLE: /home/ruby/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
– EXECUTABLE DIRECTORY: /home/ruby/ruby/gems/bin
– RUBYGEMS PLATFORMS:
– ruby
– x86_64-linux
– GEM PATHS:
– /home/ruby/ruby/gems
– GEM CONFIGURATION:
– :update_sources => true
– :verbose => true
– :benchmark => false
– :backtrace => false
– :bulk_threshold …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 VPS 上部署 octopress 但收到此错误bundle: not found
但已安装捆绑包!
完全错误。
$ cap deploy
* 2013-07-20 18:08:55 executing `deploy'
* 2013-07-20 18:08:55 executing `deploy:update'
** transaction: start
* 2013-07-20 18:08:55 executing `deploy:update_code'
updating the cached checkout on all servers
executing locally: "git ls-remote git@mydomain.com:website.git HEAD"
command finished in 8348ms
* executing "if [ -d /home/deploy/ruby_apps/website/shared/cached-copy ]; then cd /home/deploy/ruby_apps/website/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard de26553c0aa7ea583e0bfdec2c103ba83adbb793 && git clean -q -d …
Run Code Online (Sandbox Code Playgroud) 在 ubuntu 终端中,直到运行以下命令后,我的 .bashrc 才可用: source ~/.bashrc
我有一个 ~/.bash_profile ,内容如下:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
Run Code Online (Sandbox Code Playgroud)
我有一个 ~/.profile :
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能自动加载我的 .bashrc?我应该合并 .bash_profile 和 .profile 并删除其中之一吗?谢谢