Ruby on rails 将Rails 2应用程序移植到新服务器

Ruby on rails 将Rails 2应用程序移植到新服务器,ruby-on-rails,ruby,rubygems,porting,freeze,Ruby On Rails,Ruby,Rubygems,Porting,Freeze,在这个过程中,我已经发布了几个其他问题,但我对我要做的事情有了更好的了解,所以我想我应该问一下 我继承了一个Rails 2.2.2应用程序,它目前以生产形式运行在我可以访问的服务器上。我正在尝试将该应用程序移植到我的服务器、版本控制等等。我首先尝试复制源代码,让它在Rails 3和最新版本的gems下运行,但事实证明这比我想象的要困难得多。似乎最好的解决方案是简单地使用当前系统正在使用的Rails和其他Gem的相同版本,并按原样在应用程序上进行移植 所以我想知道最好的方法是什么?我可以将源代码放

在这个过程中,我已经发布了几个其他问题,但我对我要做的事情有了更好的了解,所以我想我应该问一下

我继承了一个Rails 2.2.2应用程序,它目前以生产形式运行在我可以访问的服务器上。我正在尝试将该应用程序移植到我的服务器、版本控制等等。我首先尝试复制源代码,让它在Rails 3和最新版本的gems下运行,但事实证明这比我想象的要困难得多。似乎最好的解决方案是简单地使用当前系统正在使用的Rails和其他Gem的相同版本,并按原样在应用程序上进行移植

所以我想知道最好的方法是什么?我可以将源代码放在我的版本控制系统中,并以与现在相同的方式设置Capistrano和Passenger。问题是在同一版本中获得所有的宝石。我听说过冻结Rails和冻结gems,但很多关于它的教程看起来有点过时。在当前运行的生产服务器上冻结gems安全吗?还是我应该只获取gems及其版本的列表,然后手动将它们全部安装到我要移植到的新服务器上

编辑:我按照tadman的建议建立了一个GEM文件,其中包含生产服务器上安装的所有GEM和最新版本,但现在我陷入了版本控制混乱,例如:

Bundler could not find compatible versions for gem "ruby2ruby":
  In Gemfile:
    merb-action-args (= 1.0.8.1) depends on
      ruby2ruby (>= 1.1.9)

    ambition (= 0.5.4) depends on
      ruby2ruby (1.1.8)
生产服务器有时最多安装4个版本的同一个gem,但Bundler似乎只想处理每个版本的一个版本。有没有一个简单的方法来解决这种情况,还是回到了生产过程中的冻结宝石


编辑2:我最终从除rails之外的所有gems中删除了版本,并进行了
捆绑安装
。到目前为止,尽管所有版本都不完全匹配,但它似乎仍能正常工作。

切换到Rails 3可能是一个令人头疼的问题,但是打包gems的历史版本会容易得多。在某种程度上,您可以在
Gemfile
中为应用程序声明所需的特定版本,从而使这变得更容易。虽然这是Rails 3中实际使用的方法,但它与平台无关,可以在Rails的任何版本上用作分发机制

您通常可以确定与
gem list
as一起使用的gems版本,除非在
config/environment.rb中另有规定,否则会自动选择最新版本。将gem列表转换为
Gemfile

很容易,而不是使用
gem list
中的(巨大的)gem列表,我在代码库中搜索gem列表,并删除未使用的gem。这使得包裹的大小更易于管理。