Interactive `rails new`

159 views
Skip to first unread message

Viktor Fonic

unread,
Jun 4, 2018, 5:37:48 AM6/4/18
to Ruby on Rails: Core
Hi,

Every time I run `rails new`, I need to pull out the command I use (and maybe even the template as well). The command I currently use looks like this:
$ rails new magic --database=postgresql --skip-coffee --skip-turbolinks --skip-test --skip-system-test --webpack=react

On the other hand (and I know I'm comparing apples and oranges here), here's what happens when I run `npm init`:
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (asd)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Users/vfonic/Developer/javascript/asd/package.json:

{
  "name": "asd",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes)


Bold are prompts, with sensible defaults in the (brackets).

Wouldn't it be great if rails had something similar? Imagine gems attaching directly to the `rails new` and immediately installing and setting up even before you `cd` to your app! If not, at least I'll be able to skip all the flags I want to skip, by going through the interactive `rails new`.

If you prefer the simplicity of `rails new` and would like to keep it, we could add a single "Y/n" prompt before all the others:
Create new app with sensible defaults Y/n:

What do you think?

Andrew Kaspick

unread,
Jun 4, 2018, 8:55:52 AM6/4/18
to Ruby on Rails: Core
+1 Nice idea.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-co...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Emanuel Hayford

unread,
Jul 16, 2018, 8:01:43 PM7/16/18
to Ruby on Rails: Core
+1 I like this idea :)

Rolandas Barysas

unread,
Jul 17, 2018, 4:17:13 AM7/17/18
to rubyonra...@googlegroups.com
I think it would be against the idea of convention over configuration. You can create an alias if you use those flags all the time.

Leonardo Prado

unread,
Jul 17, 2018, 9:40:31 AM7/17/18
to rubyonra...@googlegroups.com
+1 for the idea.

But I would put it behind some flag, like `rails new --interactive`. This way we'll still have the default "convention over configuration" and add an option for when you need to add more configuration.

Xavier Noria

unread,
Aug 4, 2018, 5:24:44 AM8/4/18
to rubyonrails-core
The application generator has about 25 options, I believe an interactive mode wouldn't be practical.

I second Rolandas' suggestion: make your own shortcut.

For example, I often want to create a vanilla application to test something quickly, --skip-bundle is the key there.  I have a Bash function for that called "rn" that does this:

    rails new $app_name --skip-bundle "$@" && \
  cd $app_name && \
  bundle install --local

Since a Bash function can change the $PWD, I am even left at the app's root directory.

Kevin Deisz

unread,
Aug 4, 2018, 9:32:09 AM8/4/18
to rubyonra...@googlegroups.com
You can also just use the .railsrc file from your home directory to specify those args every time.


--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-co...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.


--
Kevin D. Deisz

antoin...@gmail.com

unread,
May 19, 2019, 11:45:00 AM5/19/19
to Ruby on Rails: Core
+1 for the idea

Every time I create a rails app I forget to disable stuff and end up running `rails new --help` to check every option.

I also agree that a `npm init` style interface wouldn't be practical.
Instead I suggest doing something like vue-cli does. When you run `vue create myapp`, you can pick features step by step. See https://cli.vuejs.org/guide/creating-a-project.html#vue-create

We could imagine a first step where you can toggle turbolinks, sprockets, action mailer, coffee script, webpacker etc...
Then another step to select a database preconfiguration (mysql/postgresql/...) if database wasn't disabled in the first step.
Then another step to select webpack integrations (erb, react, angular, vue...).

It doesn't have to allow to toggle every option of `rails new`, but to provide essentials.

I also think this would be a nice feature for rails beginners and make rails more user friendly.

Kevin Gnadinger

unread,
May 20, 2019, 8:56:56 AM5/20/19
to Ruby on Rails: Core
I like the idea and believe it should be pursued. 

However, like most other major frameworks that implement something like this, the cli should be separate from the main rails repo.

Robb Shecter

unread,
May 20, 2019, 9:35:48 PM5/20/19
to Ruby on Rails: Core
+1 as well

I think rails new could do something much more basic that'd really help  both new and experienced users: check its inputs. Fail fast and clearly instead of failing silently. There are at least a couple rails sub-commands that don't check the supplied options. I looked into attacking this issue, but it'd be a good amount of work.

Philip Lambok

unread,
Jun 26, 2019, 4:01:58 AM6/26/19
to Ruby on Rails: Core
+1 I love the idea. The interactive option can be an alternative to creating a rails app without having to eliminate the current option.
Reply all
Reply to author
Forward
0 new messages