Note: Before upgrading your Rails app, always make sure to save your code on a version control system, such as Git.
To upgrade from Rails 4.2 to Rails 5.0, you must be using Ruby 2.2.2 or newer. After upgrading your Ruby version if required, go to your Gemfile and change the line:
gem 'rails', '4.2.X'
to:
gem 'rails', '~> 5.0.0'
and on the command line run:
$ bundle update
Now run the update task using the command:
$ rake rails:update
This will help you to update configuration files. You will be prompted to overwrite files and you have several options to input:
Typically, you should check the differences between the old and new files to make sure you aren't getting any unwanted changes.
Rails 5.0 ActiveRecord
models inherit from ApplicationRecord
, rather than ActiveRecord::Base
. ApplicationRecord
is the superclass for all models, similar to how ApplicationController
is the superclass for controllers. To account for this new way in which models are handled, you must create a file in your app/models/
folder called application_record.rb
and then edit that file's contents to be:
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
Rails 5.0 also handles callbacks slightly different. Callbacks that return false
won't halt the callback chain, which means subsequent callbacks will still run, unlike Rails 4.2. When you upgrade, the Rails 4.2 behavior will remain, though you can switch to the Rails 5.0 behavior by adding:
ActiveSupport.halt_callback_chains_on_return_false = false
to the config/application.rb
file. You can explicitly halt the callback chain by calling throw(:abort)
.
In Rails 5.0, ActiveJob
will inherit from ApplicationJob
, rather than ActiveJob::Base
like in Rails 4.2. To upgrade to Rails 5.0, create a file called application_job.rb
in the app/jobs/
folder. Edit that file's contents to be:
class ApplicationJob < ActiveJob::Base
end
Then, you must change all of your jobs to inherit from ApplicationJob
rather than ActiveJob::Base
.
One of the other biggest changes of Rails 5.0 doesn't require any code changes, but will change the way you use the command line with your Rails apps. You will be able to use bin/rails
, or just rails
, to run tasks and tests. For example, instead of using $ rake db:migrate
, you can now do $ rails db:migrate
. If you run $ bin/rails
, you can view all the available commands. Note that many of the tasks that can now be run with bin/rails
still work using rake
.