Rails App Creation with Options

Published: Mar 5, 2023

The easiest way to create a Ruby on Rails app is absolutely to hit the command:

rails new [APP_NAME]

Above generates files to develop an entry level app to high end complicated app. It’s pretty handy.

However, that one-size-fits-all like command does too much often. Basically, Ruby on Rails is a gorgeous web framework which provides every feature these days’ web application needs. In reality, people might want to create a few pages with a database backend. Other people might want to create just an API server. To answer such various needs, Ruby on Rails has a lot of options to create an app — really a lot!

We can see all options by hitting the command below outside of a rails app directory.

rails -h
# or 
rails --help

You’ll see a bunch of options showing up with descriptions. The problem is, those descriptions are not always clear enough. Besides, options change as Ruby on Rails version goes up.

To start using Rails 7, I did some googling to figure out what all those options are about. This is a memo what I learned from my research.

List of options

Here’s an excerpt of rails new options of Ruby on Rails 7. The list doesn’t have all. I focused on something not clear enough. The description column is what rails --help command prints out. The additional info columns is what I added with my understanding.

option short description additional info
–skip-namespace   Skip namespace (affects only isolated engines) When a rails engine is created by rails new plugin command, the option has a meaning.
–skip-collision-check   Skip collision check When rails generate command modifies existing controller/model/view, the option has a meaning.
–skip-git -G Skip .gitignore file The option skips creating .git, .gitignore and .gitattributes files.
–skip-keeps   Skip source control .keep files The .keep file is for git to track empty directories. The option skips creating .keep file.
–skip-action-mailer -M Skip Action Mailer files The Action Mailer is used to send email from Rails app. The option skips the feature.
–skip-action-mailbox   Skip Action Mailbox gem The Action Mailbox routes incoming email to a controller. The option skips the feature.
–skip-action-text   Skip Action Text gem The Action Text handles a rich text content. The option skips the feature.
–skip-active-record -O Skip Active Record files The Active Record provides models to interact with applications’ database
–skip-active-job   Skip Active Job The Active Job is a framework for a background job. The option skips the feature.
–skip-active-storage   Skip Active Storage files The Active Storage provides a feature to upload files to cloud storages such as AWS S3.
–skip-action-cable -C Skip Action Cable files The Action Cable integrates the websockets. The option skips the feature.
–skip-asset-pipeline -A Indicates when to generate skip asset pipeline The asset pipeline concatenates and minifies Javascript and CSS and is provided by sprockets. The option skips the feature.
–skip-javascript -J Skip JavaScript files The option skips creating app/javascript directory. It’s useful when front-end app is separated from Rails.
–skip-hotwire   Skip Hotwire integration Hotwire is a default front-end framework for Rails and is a combination of Stimulus and Turbo. The option skips the feature.
–skip-jbuilder   Skip jbuilder gem Jbuilder is a JSON builder and provides a DSL to declare JSON structures.
–skip-test -T Skip test files The option skips to generate unit test files. When RSpec will be used, specify this option.
–skip-system-test   Skip system test files The option skips to generate system test files which allow to test JavaScript functionalities.
–skip-bootsnap   Skip bootsnap gem The option skips bootsnap which optimizes and caches expensive computations for Ruby and Active Support.
–skip-bundle -B Don’t run bundle install The option skips to run bundle install when the Rails app is created.
–template=TEMPLATE -m Path to some application template (can be a filesystem path or URL) The TEMPLATE file configures gems to integrate in Rails’ Gemfile.
–rc=RC   Path to file containing extra configuration options for rails command The RC file is ~/.railsrc which has a list of options to run rails new command.
–javascript=JAVASCRIPT -j Choose JavaScript approach [options: importmap (default), webpack, esbuild, rollup] The option specifies how to handle and bundle JavaScript files.
–css=CSS -c Choose CSS processor [options: tailwind, bootstrap, bulma, postcss, sass. check https://github.com/rails/cssbundling-rails The option specifies a CSS framework.
–asset-pipeline=ASSET_PIPELINE -a Choose your asset pipeline [options: sprockets (default), propshaft] The option specifies an asset pipeline library, legacy Sprockets or newer Propshaft.
–database=DATABASE -d Preconfigure for selected database (options: mysql/postgresql/sqlite3/oracle/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc) The option specifies a database. Options start from jdbc are for JRuby.
–api   Preconfigure smaller stack for API only apps The option skips to create app/assets and etc directories which won’t be used in API only app.
–minimal   Preconfigure a minimal rails app The option creates a minimal Rails app with active record and a few more features.

Front-end Options

Among rails new options, front-end related might draw your eyes. Those are:

  • –skip-asset-pipeline
  • –skip-javascript
  • –skip-hotwire
  • –javascript=JAVASCRIPT
  • –css=CSS
  • –asset-pipeline=ASSET_PIPELINE

One thing I should mention is that the --webpack option is not there. That’s because Webpacker has been retired as described in the GitHub repo https://github.com/rails/webpacker. The feasible replacement of Webpacker would be importmap or esbuild, which can be specified by the --javascript=JAVASCRIPT option. Both importmap and esbuild are for a rick client such as React. The importmap is specifically for Rails freed from npm or yarn, while esbuild is a tool of JavaScript world.

Another option I should mention is --skip-hotwire. To specify this option or not, we should understand what is Hotwire. Hotwire was introduced in Ruby on Rails 7, and is a default front-end framework. Not like React, Hotwire is a server-rendered type framework. Hotwire avoids odds related to a rich client such as bundling, the first loading time, JavaScript framework chaos or other. Whether you will stick to the JavaScript world to develop front-end code or not, it’s your choice.

One more options to look at is --asset-pipeline=ASSET_PIPELINE. The asset pipeline got a choice of Propshaft. Propshaft is a kind of simplified Sprockets and workd with jsbundling-rails ans cssbundling-rails gems. Its GitHub repo, https://github.com/rails/propshaft, explains details.

Options for Simplicity

You might think Ruby on Rails is too gorgeous to do just this, so better look at other frameworks. In such a case, two options might help:

  • –api
  • –minimal

To develop an API server which doesn’t need any front-end stuff, --api option works. When the option is given, rails new command strips out many features and creates a much smaller stack with necessities for an API server.

The --minimal option is interesting. When the option is specified, rails new command creates a bare minimal web app stack. It has features of database access, assets access, and just a couple more.

DRY Options

OKey, we learned rails new options, so now, it’s time to create a Rails app. Well, let’s specify this option, that option, those options and … You might end up with typing long, long line to create the app. When you hit return key, you might find a typo in one of options. It might be a case that you repeat creating Rails apps for multiple projects with the same set of options.

Yes, Rails provides DRY, don’t repeat yourself, way:

  • –rc=RC
  • –template=TEMPLATE

The rc file is, like a .bashrc or .zshrc, ~/.railsrc by default. If the location is not under the home directory and/or has a different file name, use --rc=RC option to point it. The format of rc file is a list of options one in each line. For example,

--api
-d postgresql

Adding extra gem might repeat in multiple projects, for example, rspec-rails gem. For a DRY way, --template=TEMPLATE option is there. Create a template file, template.rb, in general. The file name can be any, though. Then, specify the template file using –template option. The format is similar to Gemfile. For example:

gem_group :development, :test do
  gem 'rspec-rails', '~> 6.0', '>= 6.0.1'
end

So, now, .railsrc file looks like below:

--api
-d postgresql
-T
-m /path/to/template.rb

Once, all are ready, hit rails new app_name command. The Rails app with the desired configurations will be created.

Latest Posts

Vite + Vue + Bun on Rails

Vue.js is one of frontend frameworks gaining popularity among rapidly emerging JavaScript technologies. The combination of Vue.js and Rails is becoming more popular as well, however, Vue.js development on Rails is not so straightforward. The reason would be that Vue.js relies on Vite for a development environment such as HMR (Hot Module Replacement) and bundling.

Bun + React on Rails

In the frontend world, new technologies keep emerging rapidly these years. Still, React is a well-established and very popular frontend framework, Vue.js, Svelte, Astro and more frameworks are gaining popularity. Not just the frameworks, tools for a transpiler/bundler or sort are also under a rapid development. In JavaScript domain, esbuild, rollup, vite and some more are out.

Ruby on Rails Secrets Management

A web application needs various kinds of values, params and etc which should not be revealed to the public, say GitHub repo. For example, API keys, tokens, passwords, and endpoints, all those should be kept secret. Another important factor is that such secrets should be shared among the team members. Additionally, all those secrets should come along with the deployment.