从Rails 3升级到Rails 3.1

61

如何从 Rails 3 升级到 Rails 3.1 beta?


http://everydayrails.com/2011/05/08/rails-3.1-beta-rvm.html - Robert Harvey
升级到Rails 3.1,请观看此视频:http://railscasts.com/episodes/282-upgrading-to-rails-3-1。 :) - bor1s
我刚将我的应用程序从3升级到了3.1 - 并在这里进行了记录。 - Plattsy
这个问题同样适用于Rails 3.0到Rails 3.1,感谢您的提问。在我谷歌搜索到这里之前,我并不知道rake rails:update - Ninjaxor
5个回答

54

这是我在更新现有的 rails 3.0.8 项目时使用的方法。具体效果因人而异...

将 Gemfile 中指定的 Rails 版本更新到最新的 release candidate:

gem 'rails', '3.1.0.rc4’

更新捆绑包:

bundle update

然后使用rake命令更新项目:

rake rails:update

在解决了代码冲突后,我运行了所有测试并且通过了(耶!)。我重新启动了服务器,到目前为止一切看起来都很好。

然而,这仍然没有使用新的资源管道。也就是说,javascript和css(或sass)文件仍然以预管道方式处理。据我所知,这是一个完全可行的选择。但当然,我想要新的特性,因此我认为下一步是包含其他gem(例如coffeescript、sass、uglifier等),然后将旧文件迁移到app/assets目录。

关于这方面的详细信息,我在这里找到了一些内容:

http://blog.nodeta.com/2011/06/14/rails-3-1-asset-pipeline-in-the-real-world/

希望这有所帮助。


5
如果你只想更新绑定包中与 Rails 相关的 gem,可以执行 bundle update rails 命令。请注意,此命令不会更改其他 gem 的版本。 - Daniel X Moore
运行得非常好!但是,当启用资产时,我会收到以下错误:No route matches [GET] /assets/application.css - Lasse Bunk

28

我刚刚通过更改Gemfile文件将Rails版本从3.0升级到了3.1:

gem 'rails', '3.1.0.rc1'
gem 'sqlite3'
gem 'sass'
gem 'coffee-script'
gem 'uglifier'

在config/environments/development.rb文件中,我也把下面的那行注释掉了。

# config.action_view.debug_rjs = true

最后,请确保在config/application.rb中启用了资产管道。

config.assets.enabled = true

我不确定你是否已经阅读了发行说明 http://weblog.rubyonrails.org/2011/4/21/jquery-new-default


1
那个回答是唯一一个真正解决问题的。Railscasts 的视频很棒,但它没有说明如何进行迁移。 - VP.
3
我注意到对于 rc5 版本,Gemfile 文件有点不同;它安装了 sass-railscoffee-rails 两个 gem 包,版本号都是 3.1.0.rc1,然后将这些 gem 包(连同 uglifier)放在一个 group :assets do/end 代码块中。为了查看添加的内容,可以在另一个目录中生成一个新的 edge Rails 站点。 - Ben Kreeger

13

升级Rails

更新:小心使用系统自带的rake,因为rake已经升级。

bundle exec rake

该链接(来源)确保你在给定的Rails项目中使用正确的rake。


建议从一个新应用程序开始,然后在将资源转移到新的asset/sprockets格式时复制特定的应用程序信息。

一个例子

将一个旧的 rails 2.3.4 应用程序转换为 3.0 时,我试图在项目内逐个更改文件,结果失败了。显然这是一种有缺陷的策略,但我也学到了一些东西。最终我跳过了3.0,并在获得正确的迁移后,使用全新的应用程序移动到了3.1beta1版本,并复制了我的应用程序和公共文件夹。这次转移还有一些未解决的问题,其中最重要的是我没有使用Rails Edge来创建新的应用程序(感谢RubyInside提供的提示)。

首先获取最新版本的rails:

cd ~/goodtimes

git clone https://github.com/rails/rails.git

我的路径包括一个~/Desktop/Dropbox/,所以我的代码可以随时访问。

然后引用那个rails exec来构建新的应用程序:

~/goodtimes/rails/bin/rails new bacon --edge

根据数据库的复杂性,您可能需要使用更改语法创建新的迁移,或将其保留不变:

 class CreatePosts < ActiveRecord::Migration
    def change
      create_table :posts do |t|
        t.string :title
        t.text :body

        t.timestamps
      end
    end
  end

我在部署到Heroku时遇到了问题,但是RubyRacer gem帮助解决了这个问题。下面是一个简单的Gem文件示例:

source 'http://rubygems.org'

gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'

# Asset template engines
gem 'sass'
gem 'coffee-script'
gem 'uglifier'

gem 'jquery-rails'
gem 'pg'
gem 'therubyracer-heroku', '0.8.1.pre3', :platforms => :ruby

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'

group :test do
  # Pretty printed test output
  gem 'turn', :require => false
end

我猜测会有社区工具帮助您自动迁移旧版本的Rails到最新版。

参考资料:

  1. 如何立即使用Rails 3.1、CoffeeScript及其他技术
  2. Rails 3.1beta的四大支柱:Coffee-Script、jQuery、SCSS和Assets
  3. 从您的iPhone上部署Rails 3.1beta到Heroku
  4. 可逆转的数据库迁移

3
我建议您更新Gemfile以使用Edge Rails。例如:
gem 'rails',     :git => 'git://github.com/rails/rails.git'
gem 'arel',      :git => 'git://github.com/rails/arel.git'
gem 'rack',      :git => 'git://github.com/rack/rack.git'
gem 'sprockets', :git => 'git://github.com/sstephenson/sprockets.git'

gem 'sqlite3'

# Asset template engines
gem 'sass', '~> 3.1.0.alpha'
gem 'coffee-script'
gem 'uglifier'

您可以在这里阅读更多关于Easy Edge Rails的信息。

你的链接缺少一个0。应该是:http://pogodan.com/blog/2011/04/24/easy-edge-rails - Trevor Stow

1

如果我正确理解了你的问题,那么是这样的:

gem install rails --pre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接