Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails 3.2.13-对Rails应用程序使用不同的Gemset_Ruby On Rails_Ruby_Rvm_Gemset - Fatal编程技术网

Ruby on rails RubyonRails 3.2.13-对Rails应用程序使用不同的Gemset

Ruby on rails RubyonRails 3.2.13-对Rails应用程序使用不同的Gemset,ruby-on-rails,ruby,rvm,gemset,Ruby On Rails,Ruby,Rvm,Gemset,我目前有几个运行版本3.2.13的Rails应用程序使用Ruby 1.9.3。我计划最终将我当前的应用程序升级到Rails 4.0,然后将Ruby升级到2.0。我需要仔细计算转换到Ruby 2.0的时间,因为据我所知,Phusion Passenger只会处理一个版本的Ruby,而不会处理一些流鼻血的解决方案,我现在不打算尝试实现这些解决方案 我目前在所有Rails应用程序中使用一个gemset。我希望在某个时候将我的Rails应用程序从3.2.13一个一个地转换为Rails 4.0的当前版本。

我目前有几个运行版本3.2.13的Rails应用程序使用Ruby 1.9.3。我计划最终将我当前的应用程序升级到Rails 4.0,然后将Ruby升级到2.0。我需要仔细计算转换到Ruby 2.0的时间,因为据我所知,Phusion Passenger只会处理一个版本的Ruby,而不会处理一些流鼻血的解决方案,我现在不打算尝试实现这些解决方案

我目前在所有Rails应用程序中使用一个gemset。我希望在某个时候将我的Rails应用程序从3.2.13一个一个地转换为Rails 4.0的当前版本。当我尝试将我的一个应用程序更新到更新版本的Rails时,我被告知必须执行更新Rails命令

我想做的是能够使用Rails 3.2.13运行我的一些应用程序,以及使用Rails 4.0运行其他应用程序,直到我确信它们都能在Rails 4.0下正常运行。一旦我这样做了,我将回顾Ruby 1.9.3(如果有的话)之间的差异,并将它们全部升级到Rails 2.0。在这一点上,我理解我只需要为2.0.0或Ruby 2的最新稳定版本创建gemset

我已经做了网络搜索并查看了RVM网站。我了解gemeset是如何分配给您想要运行的Ruby版本的。但是,我没有看到任何关于在同一台机器上使用相同版本Ruby的gems,而是在不同的应用程序上使用不同版本的Rails或其他gems组合的情况。这能做到吗


任何帮助都将不胜感激。

您的Gemfile.lock nails锁定您使用的每个gem的版本-您不必担心gemets

bundle install
将始终安装正确的版本,并且您的应用程序将始终使用Gemfile.lock中的版本,即使有其他版本在运行

请仔细查看!)

首先,创建一个新的gemset,其名称与您的项目对应 示例:
rvm gemset创建项目\u名称

然后在项目目录中创建/编辑.rvmrc文件:
rvm use 1.9。3@project_name

一个陷阱是,如果执行以下命令

cd some_project
cd ../other_project
而另一个项目没有指定gemset,您将留在某个项目gemset中。为了避免这种情况,您可以在“projects”目录中创建带有默认gemset的.rvmrc文件(如果有)

它将显示使用示例gemset创建的gem集,并执行以下操作:

捆绑安装

将在示例gemset下安装该项目的所有特定gems,
您也可以为其他项目创建其他gem集,通过这种方式,您可以使用rvm为不同的项目维护不同的rails/gems和ruby版本。

这篇文章准确地解释了您在第一个示例中所说的内容。这篇文章解释了如何为不同版本的rails创建不同的gemset,但没有解释如何确定每个应用程序使用哪个gemset。也许我遗漏了什么。我喜欢像你一样,用bundler来管理我的宝石,但这确实意味着,如果有多个版本的gems在运行,就必须使用
bundle exec
——值得一提。只是澄清一下:要更新我的一个应用程序以使用Rails 4.0,我所要做的就是在我的Gemfile中更改Rails版本并添加Ruby版本号,然后执行bundle exec?我想确保这将允许我在不同的应用程序中运行Rails 3.2.13和Rails 4.0。
bundle install
/
bundle update
更新您的bundle中的内容,否则是的。bundle exec用于从gems运行可执行文件时(例如bundle exec rails g migration Foo)
bundle exec rails s
bundle exec rake…
等。这是因为,否则,您不会在bundle的上下文中运行可执行文件,因此,它将使用您系统中最新的gem,并在它与您的gem文件不匹配时进行投诉。非常感谢您的解释。我目前没有在项目中使用.rvmrc。这也许可以解释我刚刚发现的其他东西。我的尝试是为所有Rails应用程序使用一个gemset,但在列出gemset之后,我发现我无意中创建了其他gemset。看来我的宝石已经失控了。我可以在这里尝试另一种选择。你也可以看看rbenv。就我个人而言,我有完全不同的方法,因为我所有的应用程序都是Ruby 1.9.3。我告诉bundler在project_dir/.gems中安装gems,所以对于每个项目,默认情况下我都有gem分离。但是你看它还不完整
Project Folder
|___Gemfile
|__.ruby-gemset
|__.ruby-version

 Gemfile with all the required gems mention in your project folder
.ruby-gemset should have gem set name like sample-gemset
.ruby-version file should have specific ruby version (e.g 2.0)

 rvm gemset list