More at rubyonrails.org:

1. Overview

The Rails command line is a powerful part of the Ruby on Rails framework. It allows you to quickly start a new application by generating boilerplate code (that follows Rails conventions). This guide includes an overview of Rails commands that allow you to manage all aspects of your web application, including the database.

You can get a list of commands available to you, which will often depend on your current directory, by typing bin/rails --help. Each command has a description to help clarify what it does.

$ bin/rails --help Usage:  bin/rails COMMAND [options] You must specify a command. The most common commands are:  generate Generate new code (short-cut alias: "g")  console Start the Rails console (short-cut alias: "c")  server Start the Rails server (short-cut alias: "s")  test Run tests except system tests (short-cut alias: "t")  test:system Run system tests  dbconsole Start a console for the database specified in config/database.yml  (short-cut alias: "db")  plugin new Create a new Rails railtie or engine All commands can be run with -h (or --help) for more information. 

The output of bin/rails --help then proceeds to list all commands in alphabetical order, with a short description of each:

In addition to those commands, there are: about List versions of all Rails frameworks ... action_mailbox:ingress:exim Relay an inbound email from Exim to ... action_mailbox:ingress:postfix Relay an inbound email from Postfix ... action_mailbox:ingress:qmail Relay an inbound email from Qmail to ... action_mailbox:install Install Action Mailbox and its ... ... db:fixtures:load Load fixtures into the ... db:migrate Migrate the database ... db:migrate:status Display status of migrations db:rollback Roll the schema back to ... ... turbo:install Install Turbo into the app turbo:install:bun Install Turbo into the app with bun turbo:install:importmap Install Turbo into the app with asset ... turbo:install:node Install Turbo into the app with webpacker turbo:install:redis Switch on Redis and use it in development version Show the Rails version yarn:install Install all JavaScript dependencies as ... zeitwerk:check Check project structure for Zeitwerk ... 

In addition to bin/rails --help, running any command from the list above with the --help flag can also be useful. For example, you can learn about the options that can be used with bin/rails routes:

$ bin/rails routes --help Usage:  bin/rails routes Options:  -c, [--controller=CONTROLLER] # Filter by a specific controller, e.g. PostsController or Admin::PostsController.  -g, [--grep=GREP] # Grep routes by a specific pattern.  -E, [--expanded], [--no-expanded] # Print routes expanded vertically with parts explained.  -u, [--unused], [--no-unused] # Print unused routes. List all the defined routes 

Most Rails command line subcommands can be run with --help (or -h) and the output can be very informative. For example bin/rails generate model --help prints two pages of description, in addition to usage and options:

$ bin/rails generate model --help Usage:  bin/rails generate model NAME [field[:type][:index] field[:type][:index]] [options] Options: ... Description:  Generates a new model. Pass the model name, either CamelCased or  under_scored, and an optional list of attribute pairs as arguments.  Attribute pairs are field:type arguments specifying the  model's attributes. Timestamps are added by default, so you don't have to  specify them by hand as 'created_at:datetime updated_at:datetime'.  As a special case, specifying 'password:digest' will generate a  password_digest field of string type, and configure your generated model and  tests for use with Active Model has_secure_password (assuming the default ORM and test framework are being used).  ... 

Some of the most commonly used commands are:

  • bin/rails console
  • bin/rails server
  • bin/rails test
  • bin/rails generate
  • bin/rails db:migrate
  • bin/rails db:create
  • bin/rails routes
  • bin/rails dbconsole
  • rails new app_name

We'll cover the above commands (and more) in the following sections, starting with the command for creating a new application.

2. Creating a New Rails Application

We can create a brand new Rails application using the rails new command.

You will need the rails gem installed in order to run the rails new command. You can do this by typing gem install rails - for more step-by-step instructions, see the Installing Ruby on Rails guide.

With the new command, Rails will set up the entire default directory structure along with all the code needed to run a sample application right out of the box. The first argument to rails new is the application name:

$ rails new my_app  create  create README.md  create Rakefile  create config.ru  create .gitignore  create Gemfile  create app  ...  create tmp/cache  ...  run bundle install 

You can pass options to the new command to modify its default behavior. You can also create application templates and use them with the new command.

2.1. Configure a Different Database

When creating a new Rails application, you can specify a preferred database for your application by using the --database option. The default database for rails new is SQLite. For example, you can set up a PostgreSQL database like this:

$ rails new booknotes --database=postgresql  create  create app/controllers  create app/helpers ... 

The main difference is the content of the config/database.yml file. With the PostgreSQL option, it looks like this:

# PostgreSQL. Versions 9.3 and up are supported. # # Install the pg driver: # gem install pg # On macOS with Homebrew: # gem install pg -- --with-pg-config=/usr/local/bin/pg_config # On Windows: # gem install pg # Choose the win32 build. # Install PostgreSQL and put its /bin directory on your path. # # Configure Using Gemfile # gem "pg" # default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see Rails configuration guide # https://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 3 } %> development: <<: *default database: booknotes_development ... 

The --database=postgresql option will also modify other files generated for a new Rails app appropriately, such as adding the pg gem to the Gemfile, etc.

2.2. Skipping Defaults

The rails new command by default creates dozens of files. By using the --skip option, you can skip some files from being generated if you don't need them. For example,

$ rails new no_storage --skip-active-storage Based on the specified options, the following options will also be activated:  --skip-action-mailbox [due to --skip-active-storage]  --skip-action-text [due to --skip-active-storage]  create  create README.md  ... 

In the above example, Action Mailbox and Action Text are skipped in addition to Active Storage because they depend on Active Storage functionality.

You can get a full list of what can be skipped in the options section of rails new --help command.

3. Starting a Rails Application Server

We can start a Rails application using the bin/rails server command, which launches the Puma web server that comes bundled with Rails. You'll use this any time you want to access your application through a web browser.

$ cd my_app $ bin/rails server => Booting Puma => Rails 8.1.0 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma version: 6.4.0 (ruby 3.1.3-p185) ("The Eagle of Durango") * Min threads: 3 * Max threads: 3 * Environment: development * PID: 5295 * Listening on http://127.0.0.1:3000 * Listening on http://[::1]:3000 Use Ctrl-C to stop 

With just two commands we have a Rails application up and running. The server command starts the application listening on port 3000 by default. You can open your browser to http://localhost:3000 to see a basic Rails application running.

Most common commands have a shortcut aliases. To start the server you can use the alias "s": bin/rails s.

You can run the application on a different port using the -p option. You can also change the environment using -e (default is development).

$ bin/rails server -e production -p 4000 

The -b option binds Rails to the specified IP address, by default it is localhost. You can run a server as a daemon by passing a -d option.

4. Generating Code

You can use the bin/rails generate command to generate a number of different files and add functionality to your application, such as models, controllers, and full scaffolds.

To see a list of built-in generators, you can run bin/rails generate (or bin/rails g for short) without any arguments. It lists all available generators after the usage. You can also learn more about what a specific generator will do by using the --pretend option.

$ bin/rails generate Usage:  bin/rails generate GENERATOR [args] [options] General options:  -h, [--help] # Print generator's options and usage  -p, [--pretend] # Run but do not make any changes  -f, [--force] # Overwrite files that already exist  -s, [--skip] # Skip files that already exist  -q, [--quiet] # Suppress status output Please choose a generator below. Rails:  application_record  benchmark  channel  controller  generator  helper ... 

When you add certain gems to your application, they may install more generators. You can also create your own generators, see the Generators guide for more information.

The purpose of Rails' built-in generators is to save you time by freeing you from having to write repetitive boilerplate code.

Let's add a controller with the controller generator.

4.1. Generating Controllers

We can find out exactly how to use the controller generator with the bin/rails generate controller command (which is the same as using it with --help). There is a "Usage" section and even an example:

$ bin/rails generate controller Usage:  bin/rails generate controller NAME [action action] [options] ... Examples:  `bin/rails generate controller credit_cards open debit credit close`  This generates a `CreditCardsController` with routes like /credit_cards/debit.  Controller: app/controllers/credit_cards_controller.rb  Test: test/controllers/credit_cards_controller_test.rb  Views: app/views/credit_cards/debit.html.erb [...]  Helper: app/helpers/credit_cards_helper.rb  `bin/rails generate controller users index --skip-routes`  This generates a `UsersController` with an index action and no routes.  `bin/rails generate controller admin/dashboard --parent=admin_controller`  This generates a `Admin::DashboardController` with an `AdminController` parent class. 

The controller generator is expecting parameters in the form of generate controller ControllerName action1 action2. Let's make a Greetings controller with an action of hello, which will say something nice to us.

$ bin/rails generate controller Greetings hello  create app/controllers/greetings_controller.rb  route get 'greetings/hello'  invoke erb  create app/views/greetings  create app/views/greetings/hello.html.erb  invoke test_unit  create test/controllers/greetings_controller_test.rb  invoke helper  create app/helpers/greetings_helper.rb  invoke test_unit 

The above command created various files at specific directories. It created a controller file, a view file, a functional test file, a helper for the view, and added a route.

To test out the new controller, we can modify the hello action and the view to display a message:

class GreetingsController < ApplicationController def hello @message = "Hello, how are you today?" end end 
<h1>A Greeting for You!</h1> <p><%= @message %></p> 

Then, we can start the Rails server, with bin/rails server, and go to the added route http://localhost:3000/greetings/hello to see the message.

Now let's use the generator to add models to our application.

4.2. Generating Models

The Rails model generator command has a very detailed "Description" section that is worth reading. Here is the basic usage:

$ bin/rails generate model Usage:  bin/rails generate model NAME [field[:type][:index] field[:type][:index]] [options] ... 

As an example, we can generate a post model like this:

$ bin/rails generate model post title:string body:text  invoke active_record  create db/migrate/20250807202154_create_posts.rb  create app/models/post.rb  invoke test_unit  create test/models/post_test.rb  create test/fixtures/posts.yml 

The model generator adds test files as well as a migration, which you'll need to run with bin/rails db:migrate.

For a list of available field types for the type parameter, refer to the API documentation. The index parameter generates a corresponding index for the column. If you don't specify a type for a field, Rails will default to type string.

In addition to generating controllers and models separately, Rails also provides generators that add code for both at once as well as other files needed for a standard CRUD resource. There are two generator commands that do this: resource and scaffold. The resource command is more lightweight than scaffold and generates less code.

4.3. Generating Resources

The bin/rails generate resource command generates model, migration, empty controller, routes, and tests. It does not generate views and it does not fill in the controller with CRUD methods.

Here are all the files generated with the resource command for post:

$ bin/rails generate resource post title:string body:text  invoke active_record  create db/migrate/20250919150856_create_posts.rb  create app/models/post.rb  invoke test_unit  create test/models/post_test.rb  create test/fixtures/posts.yml  invoke controller  create app/controllers/posts_controller.rb  invoke erb  create app/views/posts  invoke test_unit  create test/controllers/posts_controller_test.rb  invoke helper  create app/helpers/posts_helper.rb  invoke test_unit  invoke resource_route  route resources :posts 

Use the resource command when you don't need views (e.g. writing an API) or prefer to add controller actions manually.

4.4. Generating Scaffolds

A Rails scaffold generates a full set of files for a resource, including a model, controller, views (HTML and JSON), routes, migration, tests, and helper files. It can be used for quickly prototyping CRUD interfaces or when you want to generate the basic structure of a resource as a starting point that you can customize.

If you scaffold the post resource you can see all of the files mentioned above being generated:

$ bin/rails generate scaffold post title:string body:text  invoke active_record  create db/migrate/20250919150748_create_posts.rb  create app/models/post.rb  invoke test_unit  create test/models/post_test.rb  create test/fixtures/posts.yml  invoke resource_route  route resources :posts  invoke scaffold_controller  create app/controllers/posts_controller.rb  invoke erb  create app/views/posts  create app/views/posts/index.html.erb  create app/views/posts/edit.html.erb  create app/views/posts/show.html.erb  create app/views/posts/new.html.erb  create app/views/posts/_form.html.erb  create app/views/posts/_post.html.erb  invoke resource_route  invoke test_unit  create test/controllers/posts_controller_test.rb  create test/system/posts_test.rb  invoke helper  create app/helpers/posts_helper.rb  invoke test_unit  invoke jbuilder  create app/views/posts/index.json.jbuilder  create app/views/posts/show.json.jbuilder  create app/views/posts/_post.json.jbuilder 

At this point, you can run bin/rails db:migrate to create the post table (see Managing the Database for more on that command). Then, if you start the Rails server with bin/rails server and navigate to http://localhost:3000/posts, you will be able to interact with the post resource - see a list of posts, create new posts, as well as edit and delete them.

The scaffold generates test files, though you will need to modify them and actually add test cases for your code. See the Testing guide for an in-depth look at creating and running tests.

4.5. Undoing Code Generation with bin/rails destroy

Imagine you made a typing error when using the generate command for a model (or controller or scaffold or anything), it would be tedious to manually delete each file that was created by the generator. Rails provides a destroy command for that reason. You can think of destroy as the opposite of generate. It'll figure out what generate did, and undo it.

You can also use the alias "d" to invoke the destroy command: bin/rails d.

For example, if you meant to generate an article model but instead typed artcle:

$ bin/rails generate model Artcle title:string body:text  invoke active_record  create db/migrate/20250808142940_create_artcles.rb  create app/models/artcle.rb  invoke test_unit  create test/models/artcle_test.rb  create test/fixtures/artcles.yml 

You can undo the generate command with destroy like this:

$ bin/rails destroy model Artcle title:string body:text  invoke active_record  remove db/migrate/20250808142940_create_artcles.rb  remove app/models/artcle.rb  invoke test_unit  remove test/models/artcle_test.rb  remove test/fixtures/artcles.yml 

5. Interacting with a Rails Application

5.1. bin/rails console

The bin/rails console command loads a full Rails environment (including models, database, etc.) into an interactive IRB style shell. It is a powerful feature of the Ruby on Rails framework as it allows you to interact with, debug and explore your entire application at the command line.

The Rails Console can be useful for testing out ideas by prototyping with code and for creating and updating records in the database without needing to use a browser.

$ bin/rails console my-app(dev):001:0> Post.create(title: 'First!') 

The Rails Console has several useful features. For example, if you wish to test out some code without changing any data, you can use sandbox mode with bin/rails console --sandbox. The sandbox mode wraps all database operations in a transaction that rolls back when you exit:

$ bin/rails console --sandbox Loading development environment in sandbox (Rails 8.1.0) Any modifications you make will be rolled back on exit my-app(dev):001:0> 

The sandbox option is great for safely testing destructive changes without affecting your database.

You can also specify the Rails environment for the console command with the -e option:

$ bin/rails console -e test Loading test environment (Rails 8.1.0) 

5.1.1. The app Object

Inside the Rails Console you have access to the app and helper instances.

With the app method you can access named route helpers:

my-app(dev)> app.root_path => "/" my-app(dev)> app.edit_user_path => "profile/edit" 

You can also use the app object to make requests of your application without starting a real server:

my-app(dev)> app.get "/", headers: { "Host" => "localhost" } Started GET "/" for 127.0.0.1 at 2025-08-11 11:11:34 -0500 ... my-app(dev)> app.response.status => 200 

You have to pass the "Host" header with the app.get request above, because the Rack client used under-the-hood defaults to "www.example.com" if not "Host" is specified. You can modify your application to always use localhost using a configuration or an initializer.

The reason you can "make requests" like above is because the app object is the same one that Rails uses for integration tests:

my-app(dev)> app.class => ActionDispatch::Integration::Session 

The app object exposes methods like app.cookies, app.session, app.post, and app.response. This way you can simulate and debug integration tests in the Rails Console.

5.1.2. The helper Object

The helper object in the Rails console is your direct portal into Rails’ view layer. It allows you to test out view-related formatting and utility methods in the console, as well as custom helpers defined in your application (i.e. in app/helpers).

my-app(dev)> helper.time_ago_in_words 3.days.ago => "3 days" my-app(dev)> helper.l(Date.today) => "2025-08-11" my-app(dev)> helper.pluralize(3, "child") => "3 children" my-app(dev)> helper.truncate("This is a very long sentence", length: 22) => "This is a very long..." my-app(dev)> helper.link_to("Home", "/") => "<a href=\"/\">Home</a>" 

Assuming a custom_helper method is defined in a app/helpers/*_helper.rb file:

my-app(dev)> helper.custom_helper "testing custom_helper" 

5.2. bin/rails dbconsole

The bin/rails dbconsole command figures out which database you're using and drops you into the command line interface appropriate for that database. It also figures out the command line parameters to start a session based on your config/database.yml file and current Rails environment.

Once you're in a dbconsole session, you can interact with your database directly as you normally would. For example, if you're using PostgreSQL, running bin/rails dbconsole may look like this:

$ bin/rails dbconsole psql (17.5 (Homebrew)) Type "help" for help. booknotes_development=# help You are using psql, the command-line interface to PostgreSQL. Type: \copyright for distribution terms  \h for help with SQL commands  \? for help with psql commands  \g or terminate with semicolon to execute query  \q to quit booknotes_development=# \dt  List of relations  Schema | Name | Type | Owner --------+--------------------------------+-------+-------  public | action_text_rich_texts | table | bhumi  ... 

The dbconsole command is a very convenient shorthand, it's equivalent to running the psql command (or mysql or sqlite) with the appropriate arguments from your database.yml:

psql -h <host> -p <port> -U <username> <database_name> 

So if your database.yml file looks like this:

development: adapter: postgresql database: myapp_development username: myuser password: host: localhost 

Running the bin/rails dbconsole command is the same as:

psql -h localhost -U myuser myapp_development 

The dbconsole command supports MySQL (including MariaDB), PostgreSQL, and SQLite3. You can also use the alias "db" to invoke the dbconsole: bin/rails db.

If you are using multiple databases, bin/rails dbconsole will connect to the primary database by default. You can specify which database to connect to using --database or --db:

$ bin/rails dbconsole --database=animals 

5.3. bin/rails runner

The runner command executes Ruby code in the context of the Rails application without having to open a Rails Console. This can be useful for one-off tasks that do not need the interactivity of the Rails Console. For instance:

$ bin/rails runner "puts User.count" 42 $ bin/rails runner 'MyJob.perform_now' 

You can specify the environment in which the runner command should operate using the -e switch.

$ bin/rails runner -e production "puts User.count" 

You can also execute code in a Ruby file with the runner command, in the context of your Rails application:

$ bin/rails runner lib/path_to_ruby_script.rb 

By default, bin/rails runner scripts are automatically wrapped with the Rails Executor (which is an instance of ActiveSupport::Executor) associated with your Rails application. The Executor creates a “safe zone” to run arbitrary Ruby inside a Rails app so that the autoloader, middleware stack, and Active Support hooks all behave consistently.

Therefore, executing bin/rails runner lib/path_to_ruby_script.rb is functionally equivalent to the following:

Rails.application.executor.wrap do # executes code inside lib/path_to_ruby_script.rb end 

If you have a reason to opt of this behavior, there is a --skip-executor option.

$ bin/rails runner --skip-executor lib/long_running_script.rb 

5.4. bin/rails boot

The bin/rails boot command is a low-level Rails command whose entire job is to boot your Rails application. Specifically it loads config/boot.rb and config/application.rb files so that the application environment is ready to run.

The boot command boots the application and exits — it does nothing else. It can be useful for debugging boot problems. If your app fails to start and you want to isolate the boot phase (without running migrations, starting the server, etc.), bin/rails boot can be a simple test.

It can also be useful for timing application initialization. You can profile how long your application takes to boot by wrapping bin/rails boot in a profiler.

6. Inspecting an Application

6.1. bin/rails routes

The bin/rails routes command lists all defined routes in your application, including the URI Pattern and HTTP verb, as well as the Controller Action it maps to.

$ bin/rails routes  Prefix Verb URI Pattern Controller#Action  books GET /books(:format) books#index  books POST /books(:format) books#create  ...  ... 

This can be useful for tracking down a routing issue, or simply getting an overview of the resources and routes that are part of a Rails application. You can also narrow down the output of the routes command with options like --controller(-c) or --grep(-g):

# Only show routes where the controller name contains "users" $ bin/rails routes --controller users # Show routes handled by namespace Admin::UsersController $ bin/rails routes -c admin/users # Search by name, path, or controller/action with -g (or --grep) $ bin/rails routes -g users 

There is also an option, bin/rails routes --expanded, that displays even more information about each route, including the line number in your config/routes.rb where that route is defined:

$ bin/rails routes --expanded --[ Route 1 ]-------------------------------------------------------------------------------- Prefix | Verb | URI | /assets Controller#Action | Propshaft::Server Source Location | propshaft (1.2.1) lib/propshaft/railtie.rb:49 --[ Route 2 ]-------------------------------------------------------------------------------- Prefix | about Verb | GET URI | /about(.:format) Controller#Action | posts#about Source Location | /Users/bhumi/Code/try_markdown/config/routes.rb:2 --[ Route 3 ]-------------------------------------------------------------------------------- Prefix | posts Verb | GET URI | /posts(.:format) Controller#Action | posts#index Source Location | /Users/bhumi/Code/try_markdown/config/routes.rb:4 

In development mode, you can also access the same routes info by going to http://localhost:3000/rails/info/routes

6.2. bin/rails about

The bin/rails about command displays information about your Rails application, such as Ruby, RubyGems, and Rails versions, database adapter, schema version, etc. It is useful when you need to ask for help or check if a security patch might affect you.

$ bin/rails about About your application's environment Rails version 8.1.0 Ruby version 3.2.0 (x86_64-linux) RubyGems version 3.3.7 Rack version 3.0.8 JavaScript Runtime Node.js (V8) Middleware: ActionDispatch::HostAuthorization, Rack::Sendfile, ... Application root /home/code/my_app Environment development Database adapter sqlite3 Database schema version 20250205173523 

6.3. bin/rails initializers

The bin/rails initializers command prints out all defined initializers in the order they are invoked by Rails:

$ bin/rails initializers ActiveSupport::Railtie.active_support.deprecator ActionDispatch::Railtie.action_dispatch.deprecator ActiveModel::Railtie.active_model.deprecator ... Booknotes::Application.set_routes_reloader_hook Booknotes::Application.set_clear_dependencies_hook Booknotes::Application.enable_yjit 

This command can be useful when initializers depend on each other and the order in which they are run matters. Using this command, you can see what's run before/after and discover the relationship between initializers. Rails runs framework initializers first and then application ones, defined in config/initializers.

6.4. bin/rails middleware

The bin/rails middleware shows you the entire Rack middleware stack for your Rails application, in the exact order the middlewares are run for each request.

$ bin/rails middleware use ActionDispatch::HostAuthorization use Rack::Sendfile use ActionDispatch::Static use ActionDispatch::Executor use ActionDispatch::ServerTiming ... 

This can be useful to see which middleware Rails includes and which ones are added by gems (Warden::Manager from Devise) as well as for debugging and profiling.

6.5. bin/rails stats

The bin/rails stats command shows you things like lines of code (LOC) and the number of classes and methods for various components in your application.

$ bin/rails stats +----------------------+--------+--------+---------+---------+-----+-------+ | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+--------+--------+---------+---------+-----+-------+ | Controllers | 309 | 247 | 7 | 37 | 5 | 4 | | Helpers | 10 | 10 | 0 | 0 | 0 | 0 | | Jobs | 7 | 2 | 1 | 0 | 0 | 0 | | Models | 89 | 70 | 6 | 3 | 0 | 21 | | Mailers | 10 | 10 | 2 | 1 | 0 | 8 | | Channels | 16 | 14 | 1 | 2 | 2 | 5 | | Views | 622 | 501 | 0 | 1 | 0 | 499 | | Stylesheets | 584 | 495 | 0 | 0 | 0 | 0 | | JavaScript | 81 | 62 | 0 | 0 | 0 | 0 | | Libraries | 0 | 0 | 0 | 0 | 0 | 0 | | Controller tests | 117 | 75 | 4 | 9 | 2 | 6 | | Helper tests | 0 | 0 | 0 | 0 | 0 | 0 | | Model tests | 21 | 9 | 3 | 0 | 0 | 0 | | Mailer tests | 7 | 5 | 1 | 1 | 1 | 3 | | Integration tests | 0 | 0 | 0 | 0 | 0 | 0 | | System tests | 51 | 41 | 1 | 4 | 4 | 8 | +----------------------+--------+--------+---------+---------+-----+-------+ | Total | 1924 | 1541 | 26 | 58 | 2 | 24 | +----------------------+--------+--------+---------+---------+-----+-------+  Code LOC: 1411 Test LOC: 130 Code to Test Ratio: 1:0.1 

6.6. bin/rails time:zones:all

Thebin/rails time:zones:all command prints the complete list of time zones that Active Support knows about, along with their UTC offsets followed by the Rails timezone identifiers.

As an example, you can use bin/rails time:zones:local to see your system's timezone:

$ bin/rails time:zones:local * UTC -06:00 * Central America Central Time (US & Canada) Chihuahua Guadalajara Mexico City Monterrey Saskatchewan 

This can be useful when setting config.time_zone in config/application.rb, when you need an exact Rails time zone name and spelling (e.g., "Pacific Time (US & Canada)"), to validate user input or when debugging.

7. Managing Assets

The bin/rails assets:* commands allow you to manage assets in the app/assets directory.

You can get a list of all commands in the assets: namespace like this:

$ bin/rails -T assets bin/rails assets:clean[count] # Removes old files in config.assets.output_path bin/rails assets:clobber # Remove config.assets.output_path bin/rails assets:precompile # Compile all the assets from config.assets.paths bin/rails assets:reveal # Print all the assets available in config.assets.paths bin/rails assets:reveal:full # Print the full path of assets available in config.assets.paths 

You can precompile the assets in app/assets using bin/rails assets:precompile. See the Asset Pipeline guide for more on precompiling.

You can remove older compiled assets using bin/rails assets:clean. The assets:clean command allows for rolling deploys that may still be linking to an old asset while the new assets are being built.

If you want to clear public/assets completely, you can use bin/rails assets:clobber. assets:clobber`.

8. Managing the Database

The commands in this section, bin/rails db:*, are all about setting up databases, managing migrations, etc.

You can get a list of all commands in the db: namespace like this:

$ bin/rails -T db bin/rails db:create # Create the database from DATABASE_URL or bin/rails db:drop # Drop the database from DATABASE_URL or bin/rails db:encryption:init # Generate a set of keys for configuring bin/rails db:environment:set # Set the environment value for the database bin/rails db:fixtures:load # Load fixtures into the current environments bin/rails db:migrate # Migrate the database (options: VERSION=x, bin/rails db:migrate:down # Run the "down" for a given migration VERSION bin/rails db:migrate:redo # Roll back the database one migration and bin/rails db:migrate:status # Display status of migrations bin/rails db:migrate:up # Run the "up" for a given migration VERSION bin/rails db:prepare # Run setup if database does not exist, or run bin/rails db:reset # Drop and recreate all databases from their bin/rails db:rollback # Roll the schema back to the previous version bin/rails db:schema:cache:clear # Clear a db/schema_cache.yml file bin/rails db:schema:cache:dump # Create a db/schema_cache.yml file bin/rails db:schema:dump # Create a database schema file (either db/ bin/rails db:schema:load # Load a database schema file (either db/ bin/rails db:seed # Load the seed data from db/seeds.rb bin/rails db:seed:replant # Truncate tables of each database for current bin/rails db:setup # Create all databases, load all schemas, and bin/rails db:version # Retrieve the current schema version number bin/rails test:db # Reset the database and run `bin/rails test` 

8.1. Database Setup

The db:create and db:drop commands create or delete the database for the current environment (or all environments with the db:create:all, db:drop:all)

The db:seed command loads sample data from db/seeds.rb and the db:seed:replant command truncates tables of each database for the current environment and then loads the seed data.

The db:setup command creates all databases, loads all schemas, and initializes with the seed data (it does not drop databases first, like the db:reset command below).

The db:reset command drops and recreates all databases from their schema for the current environment and loads the seed data (so it's a combination of the above commands).

For more on seed data, see this section of the Active Record Migrations guide.

8.2. Migrations

The db:migrate command is one of the most frequently run commands in a Rails application; it migrates the database by running all new (not yet run) migrations.

The db:migrate:up command runs the "up" method and the db:migrate:down command runs the "down" method for the migration specified by the VERSION argument.

$ bin/rails db:migrate:down VERSION=20250812120000 

The db:rollback command rolls the schema back to the previous version (or you can specify steps with the STEP=n argument).

The db:migrate:redo command rolls back the database one migration and re-migrates up. It is a combination of the above two commands.

There is also a db:migrate:status command, which shows which migrations have been run and which are still pending:

$ bin/rails db:migrate:status database: db/development.sqlite3  Status Migration ID Migration Name --------------------------------------------------  up 20250101010101 Create users  up 20250102020202 Add email to users  down 20250812120000 Add age to users 

Please see the Migration Guide for an explanation of concepts related to database migrations and other migration commands.

8.3. Schema Management

There are two main commands that help with managing the database schema in your Rails application: db:schema:dump and db:schema:load.

The db:schema:dump command reads your database’s current schema and writes it out to the db/schema.rb file (or db/structure.sql if you’ve configured the schema format to sql). After running migrations, Rails automatically calls schema:dump so your schema file is always up to date (and doesn't need to be modified manually).

The schema file is a blueprint of your database and it is useful for setting up new environments for tests or development. It’s version-controlled, so you can see changes to the schema over time.

The db:schema:load command drops and recreates the database schema from db/schema.rb (or db/structure.sql). It does this directly, without replaying each migration one at a time.

This command is useful for quickly resetting a database to the current schema without running years of migrations one by one. For example, running db:setup also calls db:schema:load after creating the database and before seeding it.

You can think of db:schema:dump as the one that writes the schema.rb file and db:schema:load as the one that reads that file.

8.4. Other Utility Commands

8.4.1. bin/rails db:version

The bin/rails db:version command will show you the current version of the database, which can be useful for troubleshooting.

$ bin/rails db:version database: storage/development.sqlite3 Current version: 20250806173936 

8.4.2. db:fixtures:load

The db:fixtures:load command loads fixtures into the current environment's database. To load specific fixtures, you can use FIXTURES=x,y. To load from a subdirectory in test/fixtures, use FIXTURES_DIR=z.

$ bin/rails db:fixtures:load  -> Loading fixtures from test/fixtures/users.yml  -> Loading fixtures from test/fixtures/books.yml 

8.4.3. db:system:change

In an existing Rails application, it's possible to switch to a different database. The db:system:change command helps with that by changing the config/database.yml file and your database gem to the target database.

$ bin/rails db:system:change --to=postgresql  conflict config/database.yml Overwrite config/database.yml? (enter "h" for help) [Ynaqdhm] Y  force config/database.yml  gsub Gemfile  gsub Gemfile ... 

8.4.4. db:encryption:init

The db:encryption:init command generates a set of keys for configuring Active Record encryption in a given environment.

9. Running Tests

The bin/rails test command helps you run the different types of tests in your application. The bin/rails test --help output has good examples of the different options for this command:

You can run a single test by appending a line number to a filename:

 bin/rails test test/models/user_test.rb:27 

You can run multiple tests within a line range by appending the line range to a filename:

 bin/rails test test/models/user_test.rb:10-20 

You can run multiple files and directories at the same time:

 bin/rails test test/controllers test/integration/login_test.rb 

Rails comes with a testing framework called Minitest and there are also Minitest options you can use with the test command:

# Only run tests whose names match the regex /validation/ $ bin/rails test -n /validation/ 

Please see the Testing Guide for explanations and examples of different types of tests.

10. Other Useful Commands

10.1. bin/rails notes

The bin/rails notes command searches through your code for comments beginning with a specific keyword. You can refer to bin/rails notes --help for information about usage.

By default, it will search in app, config, db, lib, and test directories for FIXME, OPTIMIZE, and TODO annotations in files with extension .builder, .rb, .rake, .yml, .yaml, .ruby, .css, .js, and .erb.

$ bin/rails notes app/controllers/admin/users_controller.rb:  * [ 20] [TODO] any other way to do this?  * [132] [FIXME] high priority for next deploy lib/school.rb:  * [ 13] [OPTIMIZE] refactor this code to make it faster 

10.1.1. Annotations

You can pass specific annotations by using the -a (or --annotations) option. Note that annotations are case sensitive.

$ bin/rails notes --annotations FIXME RELEASE app/controllers/admin/users_controller.rb:  * [101] [RELEASE] We need to look at this before next release  * [132] [FIXME] high priority for next deploy lib/school.rb:  * [ 17] [FIXME] 

10.1.2. Add Tags

You can add more default tags to search for by using config.annotations.register_tags:

config.annotations.register_tags("DEPRECATEME", "TESTME") 
$ bin/rails notes app/controllers/admin/users_controller.rb:  * [ 20] [TODO] do A/B testing on this  * [ 42] [TESTME] this needs more functional tests  * [132] [DEPRECATEME] ensure this method is deprecated in next release 

10.1.3. Add Directories

You can add more default directories to search from by using config.annotations.register_directories:

config.annotations.register_directories("spec", "vendor") 

10.1.4. Add File Extensions

You can add more default file extensions by using config.annotations.register_extensions:

config.annotations.register_extensions("scss", "sass") { |annotation| /\/\/\s*(#{annotation}):?\s*(.*)$/ } 

10.2. bin/rails tmp:

The Rails.root/tmp directory is, like the *nix /tmp directory, the holding place for temporary files like process id files and cached actions.

The tmp: namespaced commands will help you clear and create the Rails.root/tmp directory:

$ bin/rails tmp:cache:clear # clears `tmp/cache`. $ bin/rails tmp:sockets:clear # clears `tmp/sockets`. $ bin/rails tmp:screenshots:clear` # clears `tmp/screenshots`. $ bin/rails tmp:clear # clears all cache, sockets, and screenshot files. $ bin/rails tmp:create # creates tmp directories for cache, sockets, and pids. 

10.3. bin/rails secret

The bin/rails secret command generates a cryptographically secure random string for use as a secret key in your Rails application.

$ bin/rails secret 4d39f92a661b5afea8c201b0b5d797cdd3dcf8ae41a875add6ca51489b1fbbf2852a666660d32c0a09f8df863b71073ccbf7f6534162b0a690c45fd278620a63 

It can be useful for setting the secret key in your application's config/credentials.yml.enc file.

10.4. bin/rails credentials

The credentials commands provide access to encrypted credentials, so you can safely store access tokens, database passwords, and the like inside the app without relying on a bunch of environment variables.

To add values to the encrypted YML file config/credentials.yml.enc, you can use the credentials:edit command:

$ bin/rails credentials:edit 

This opens the decrypted credentials in an editor (set by $VISUAL or $EDITOR) for editing. When saved, the content is encrypted automatically.

You can also use the :show command to view the decrypted credential file, which may look something like this (This is from a sample application and not sensitive data):

$ bin/rails credentials:show # aws: # access_key_id: 123 # secret_access_key: 345 active_record_encryption:  primary_key: 99eYu7ZO0JEwXUcpxmja5PnoRJMaazVZ  deterministic_key: lGRKzINTrMTDSuuOIr6r5kdq2sH6S6Ii  key_derivation_salt: aoOUutSgvw788fvO3z0hSgv0Bwrm76P0 # Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies. secret_key_base: 6013280bda2fcbdbeda1732859df557a067ac81c423855aedba057f7a9b14161442d9cadfc7e48109c79143c5948de848ab5909ee54d04c34f572153466fc589 

You can learn about credentials in the Rails Security Guide.

Check out the detailed description for this command in the output of bin/rails credentials --help.

11. Custom Rake Tasks

You may want to create custom rake tasks in your application, to delete old records from the database for example. You can do this with the the bin/rails generate task command. Custom rake tasks have a .rake extension and are placed in the lib/tasks folder in your Rails application. For example:

$ bin/rails generate task cool create lib/tasks/cool.rake 

The cool.rake file can contain this:

desc "I am short description for a cool task" task task_name: [:prerequisite_task, :another_task_we_depend_on] do # Any valid Ruby code is allowed. end 

To pass arguments to your custom rake task:

task :task_name, [:arg_1] => [:prerequisite_1, :prerequisite_2] do |task, args| argument_1 = args.arg_1 end 

You can group tasks by placing them in namespaces:

namespace :db do desc "This task has something to do with the database" task :my_db_task do # ... end end 

Invoking rake tasks looks like this:

$ bin/rails task_name $ bin/rails "task_name[value1]" # entire argument string should be quoted $ bin/rails "task_name[value1, value2]" # separate multiple args with a comma $ bin/rails db:my_db_task 

If you need to interact with your application models, perform database queries, and so on, your task can depend on the environment task, which will load your Rails application.

task task_that_requires_app_code: [:environment] do puts User.count end 


Back to top