对一些rails概念感到困惑,需要一些解释

时间:2011-09-23 10:44:16

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我对一些Rails的概念很困惑,比如:gemset,rubygems,bundler。我有以下三个问题:

1。安装RVM工具后,为创建rails项目设置开发环境的正确步骤是什么(比如rails v2.3项目)

2。gem install XXX”和“bundle install”之间有什么区别?我能否理解“bundle install”同时安装应用中所需的所有宝石,而“gem install XXX”只安装指定的“XXX”宝石?还有其他区别吗?为什么不使用bundler来安装特定的rails呢?

3. 如果我想将rails v3.0用于project_one,并将rails v2.3用于project_two。如何使用特定的rails版本创建两个项目?不同项目的不同ruby版本怎么样?我只需要在 Gemfile 中指定所需的版本,或者在项目路径下安装所需的版本吗?

2 个答案:

答案 0 :(得分:6)

RVM允许您创建不同的宝石集以及不同的ruby版本。

您可以使用rvm install安装不同版本的ruby。

rvm install 1.8.7

rvm install 1.9.2

rvm list known将告诉您可以安装的可用ruby实现。

说,你有两个项目:project_one和project_two,它们都有不同的gem依赖项。所以你要创建两个空的gemsets,比如Ruby 1.9.2。

rvm gemset create 1.9.2@project_one
rvm gemset create 1.9.2@project_two

要使用project_two的gemset,您可以使用rvm use来选择gemset。

rvm use 1.9.2@project_two

您还可以将以上命令添加到rails应用程序根路径中名为.rvmrc的文件中,只要您进入应用程序的根目录,rvm就会自动加载。

如果要将Rails 2.3.8用于project_one,

rvm use 1.9.2@project_one
gem install rails -v 2.3.8

和Rails 3.1.0 for project_two,

rvm use 1.9.2@project_two
gem install rails -v 3.1.0

gem installbundle install之间的区别在于gem install仅将指定的gem安装到您的gemset中,而bundle install会安装位于应用{{1}中的所有宝石}}。

答案 1 :(得分:2)

1)如果您有rvm设置我建议在您的应用文件中添加 .rvmrc 并在该文件中:

rvm --create ree-1.8.7-2011.03@myappname

这将始终使用指定版本的ruby(在这种情况下为'ree-1.8.7-2011.03')并且所有gems将安装在名为:myappname的rvm gemset中。此文件将始终确保每次从bash_console转到该文件夹​​时,它都会将rvm指向正确的环境。

2)如果你有rvm设置,那么:

gem install XXX 在指定rvm gemset中创建gem,如果不是全局rvm gemset

sudo gem install XXX 会为您添加宝石全球宝石

就像你说的那样,你应该总是使用Bundle install,并将gems用于开发,测试和生产。

3)这可以像我在第1点中所说的那样实现,只需在你的应用程序中创建这个文件