是否有控制台方式我可以将我的rails升级到新的5.0版本?
或者我是否必须手动更换升级所需的每个文件? Interne在给我这个问题的解决方案时似乎含糊不清。
答案 0 :(得分:54)
几天前我刚刚完成了这个过程,这是我的(成功)过程:
首先,确保您的应用在升级之前在Ruby 2.2+上运行。
然后将Rails更新到最新的4.x版本(现在是4.2.7),并运行您的测试套件(或完全锻炼您的应用程序),查看日志中的弃用警告。
如果发现任何弃用,请修复这些弃用。
仔细阅读5.0 release notes并记下可能会影响您应用的内容。
使用Ready4Rails检查您的Gemfile
,这有助于告诉您尚未为Rails 5做好准备的宝石。
你可能需要访问一些宝石的家庭存储库,看看是否有一个可能有支持的分支,但还没有完全发布。您可能希望将这些宝石的Gemfile固定为预发布版本或分支(即使您不立即采用,这可以帮助您在发布这些宝石的最终版本时运行)。
一般来说,它也可能有助于减少您的依赖关系。例如,您的development
块中可能包含一堆宝石,但尚未更新。你可能有一段时间没有这些生活。
有些人会建议您删除Gemfile
和bundle update
中的版本号。除了非常小的应用程序之外,我建议不要使用它。一次改变太多东西会使追踪问题变得非常困难。
更改Gemfile
中列出的Rails版本,如下所示:
gem 'rails', '= 5.0.0'
并运行bundle update rails
。
这可能会失败,并为您提供捆绑商无法解决的版本号比较列表。查找最终要求rails小于5的任何依赖项,并查看是否可以更新这些依赖项。
更改该gem的版本,撤消对rails版本的更改。 bundle update
该宝石,再次运行您的套件(或运用您使用该宝石功能的部分应用程序)并寻找弃用。
提交您正在进行中的小步骤并根据需要重复,直到最终可以将Rails固定为5.0.0
。
解决了这些阻止依赖项后,bundle update rails
成功完成后,再次提交并再次运行测试套件。
如果您的套房与我的套房类似,那么这里会有一道墙的弃用,但通常只是为每次测试重复一些事情。现在解决这些问题并不是绝对必要的,但是我会解决那些吵闹的问题......他们可能会更难看到更重要的问题。我不得不将大量的控制器规格从post :foo, name: 'bar'
更改为post :foo, params: { name: 'bar' }
,以使命名参数语法弃用警告静音。
您可能还需要更新一些代码来修复一些失败的规范。幸运的是,我没有必要,但如果您更新了Rails或其中一个宝石,您应该能够追溯根本原因。
现在,您应该运行bin/rails rails:update
来更新配置文件。仔细区分每一个以寻找变化。我更喜欢从diff输出中复制/粘贴行并将它们手动复制到我的配置中并在必要时进行调整并保持差异,直到我看到的都是diff中的自定义设置。
完成所有操作后,再次运行您的规范,并实际打开应用程序并确保它按预期工作。将其推送到临时环境以确保其在类似生产环境中的行为可能会很有用。
查看由bin/rails rails:update
(config/initializers/new_framework_defaults.rb
)创建的文件,看看您是否可以在不影响应用程序行为的情况下禁用或评论这些文件。
希望你现在已经完成了,但是你可以带来一些额外的细节。我切换到一个新目录,并使用rails new rails5project
生成一个全新的Rails应用,并复制您可能不会在您的应用中拥有的新文件,如app/models/application_record.rb
和app/mailers/application_mailer.rb
(以及过渡模型继承而不是ActiveRecord::Base
和ActionMailer::Base
)。
另外,app/assets/javascripts/cable.js
,app/assets/javascripts/channels
和app/channels
,如果你想使用ActionCable,app/jobs
如果你想使用ActiveJob`
然后查看新鲜的Rails 5应用程序Gemfile
,如果您需要,请带上那里列出的任何宝石。例如,Rails5现在附带Turbolinks 5,默认情况下为Puma,listen
和spring-watcher-listen
。
希望在所有这些之后你有一个仍然满足你在Rails 5上运行的所有需求的工作应用程序。但是,如果你因为gem依赖而被阻止,希望你能保持这个分支,直到一切准备好并合并它!
答案 1 :(得分:5)
按照这一点,确保您具有最低的Ruby要求
http://guides.rubyonrails.org/upgrading_ruby_on_rails.html
这样做的基本方法(不完全安全但会升级):
在gemfile中指定
gem 'rails', '5.0.0'
然后在你的终端
bundle update rails
答案 2 :(得分:4)
即使我正在尝试将我的rails版本升级到rails 5
这是here
后面的核对清单将application_record.rb
版本更改为 2.2.2
在app/models/
中创建# app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
并添加:
# app/models/user.rb
class User < ApplicationRecord
end
并确保所有模型都继承自它。
application_job.rb
在app/jobs/
中创建# app/jobs/application_job.rb
class ApplicationJob < ActiveJob::Base
end
并添加:
rails
更改Gemfile
gem 'rails', '5.0.0'
版本
gem 'byebug'
Rails 5需要Ruby 2.2不支持调试器。
bundle install
捆绑宝石
bundle install
rails 5
会针对某些宝石发出错误或警告,将其版本更改为DynamicURLClassLoader