新手问题 请教 rails 版本不一致的问题

welsonla · 2012年12月08日 · 最后由 nightire 回复于 2012年12月08日 · 5762 次阅读

我在 openshift 创建了一个项目,gemfile 里面的 rails 版本是 3.2.6 而我本地的版本是 3.2.9 当我 bundle install 或者 rails g 创建 controller 的时候,总是提示我错误

我不知道这种 rails 版本不一致的问题要怎么去解决呢,我再安装一个 3.2.6?

另外还有一个比较迷惑的 如果当前的 ruby 版本是系统的

gem install rails

这个 rails 是不是就安装到了 1.8 那个 ruby 下面

当我用 rvm 安装了 1.9.3 版本,并且设置为默认,rails 是不是还要重新安装

如果安装的话,这时候用 rails 创建的项目是不是就使用的是 1.9.3 版本下面的,还是要配置下$PATH 呢

bundle install 提示什么错误?

系统本地的 ruby 和 rvm 管理的 ruby 的 gems 是独立的,而且 rvm 管理的不同的 ruby 的 gems 也是独立的。

正确安装 rvm 的话,切换到什么 ruby,就是用什么 gems 集,环境变量都已经设置好不用自己设。

@Rei

» bundle show thor                                                                                                Parker@local
/Library/Ruby/Gems/1.8/gems/thor-0.14.6
```

rails s Could not find thor-0.14.6 in any of the sources Run bundle install to install missing gems.

刚开始是提示 could not find any resource of 3.2.6 大致是这样的,我把 gemfile 里的 rails 改成了我的 rails 版本 3.2.9

然后执行了一次 bundle update,现在这个 thor 找不到

我比较迷惑的是多人协同开发,这种 rails 版本不一的情况怎么弄,在某版本下安装的 rails,是不是只和这个版本的 ruby 相对应,不是独立的呢

bundle install 呢?

现在希望用系统 ruby 还是 rvm?把 PATH 输出看一下 echo $PATH

多人开发就是 gem 版本完全对着 Gemfile.lock,如果要锁 Ruby 版本就加上 .rvmrc(不过对方可以忽略)。

在某版本下安装的 rails,是不是只和这个版本的 ruby 相对应,不是独立的呢

RVM 管理的每个版本 Ruby 都有一个 gems 目录,相互独立。ls $rvm_path/gems

你用 rvm 安装了 1.9.3 并设置为默认,然后安装了 rails3.2.9,此时 rails 应该是在 global 的 gemset 里的。然后你的项目里需要的 rails 是 3.2.6 的。于是,你可以在该项目路径下创建一个新的 gemset,例如:

rvm use 1.9.3@openshift --create --rvmrc

这样,你每次进入这个项目的时候,就会切换到新的 gemset 来,于是就和你全局下的 3.2.9 隔离开了。然后你运行bundle install好了,就会在新的 gemset 里安装 3.2.6 的 rails,ok。

我是用的 homebrew 安装的 ruby

>ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0]

我删除了本地的 rvm 目录,没清理 path

>echo $PATH
/usr/local/bin:/Users/Parker/.rvm/gems/ruby-1.9.3-p125/bin:/Users/Parker/.rvm/gems/ruby-1.9.3-p125@global/bin:/Users/Parker/.rvm/rubies/ruby-1.9.3-p125/bin:/Users/Parker/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin

rvm or homebrew 用哪个搭建环境好些

#4 楼 @nightire 我觉得 global 里面再装一个 3.2.6 也不会冲突啊。虽然说 gemset 让 gem 管理更独立,不过相同的 gem 在不同的项目要重复装也很累赘。

rvm 和 homebrew 是两个不搭边的东西。homebrew 是系统的包管理工具,它可以用来安装 ruby,但是不同版本的 ruby 就需要用户手动去管理了。rvm 是专门用来管理不同版本 ruby 的工具,和 homebrew 应该配合着用。建议你还是去好好读一下 rvm 的文档,花一下午的功夫就理清头绪了。

#5 楼 @welsonla 我建议 rvm,因为服务器通常会用 Linux,没有 homebrew。

@Rei @nightire 好,谢谢各位,我原来以为这俩是重复了,所以删除了 rvm,我重新搭建一下环境吧

#6 楼 @Rei 是,Gemfile 控制得好,的确不冲突,前提是 Gemfile 里的版本约束要写好了。

至于 gemset 的问题,看怎么用了。比如说我的 global 通常都是原版不动的,所有的 ruby 项目会在一个目录下,我会事先在该目录下创建一个 gemset 和 global 隔离开,然后在里面安装常用的 gems,甚至可以包含 N 个版本的 rails。当单独创建项目的时候,视情形而定要不要单独创建 gemset,这样的话就很灵活了。

个人习惯是不喜欢在某一个 gemset 内 list 的时候看到一堆版本号……洁癖吧。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号