我对一些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 中指定所需的版本,或者在项目路径下安装所需的版本吗?
答案 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 install
和bundle 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点中所说的那样实现,只需在你的应用程序中创建这个文件