Interactive `rails new`

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?

+1 Nice idea.

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.

+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.

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.

You can also just use the .railsrc file from your home directory to specify those args every time.

https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/app/USAGE

+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 Creating a Project | Vue CLI

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.

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.

+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.

+1 I love the idea. The interactive option can be an alternative to creating a rails app without having to eliminate the current option.

Pada Senin, 04 Juni 2018 16.37.48 UTC+7, Viktor Fonic menulis: