Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Raise useful exception when db/migrate directory is absent #156

Merged
merged 1 commit into from
Feb 26, 2018

Conversation

olivierlacan
Copy link

Currently when you run bin/rails db:migrate on a fresh rails app
created with: rails new appname --skip-active-record you don't get a
db/migrate directory which results in this exception:

rails aborted!
Errno::ENOENT: No such file or directory @ dir_initialize - .../db/migrate
.../oss/sequel-rails/lib/sequel_rails/migrations.rb:9:in `migrate'
.../oss/sequel-rails/lib/sequel_rails/railties/database.rake:166:in `block (2 levels) in <top (required)>'
.../sandbox/appname/bin/rails:9:in `require'
.../sandbox/appname/bin/rails:9:in `<top (required)>'
.../sandbox/appname/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

With this fix SequelRails will catch this issue before it's too late and
gets to Sequel's migration logic (which assumes db/migrate exists). This
is the error produced now:

rails aborted!
The db/migrate directory doesn't exist, you need to create it.
.../oss/sequel-rails/lib/sequel_rails/migrations.rb:14:in `migrate'
.../oss/sequel-rails/lib/sequel_rails/railties/database.rake:166:in `block (2 levels) in <top (required)>'
.../sandbox/appname/bin/rails:9:in `require'
.../sandbox/appname/bin/rails:9:in `<top (required)>'
.../sandbox/appname/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

After following the instruction from the error mkdir -p db/migrate,
you'll then get this much friendlier error from Sequel::Migrator itself:

$ bin/rails db:migrate
rails aborted!
Sequel::Migrator::Error: No target version available, probably because no migration files found or filenames don't follow the migration filename convention
.../oss/sequel-rails/lib/sequel_rails/migrations.rb:11:in `migrate'
.../oss/sequel-rails/lib/sequel_rails/railties/database.rake:166:in `block (2 levels) in <top (required)>'
.../sandbox/appname/bin/rails:9:in `require'
.../sandbox/appname/bin/rails:9:in `<top (required)>'
.../sandbox/appname/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

Currently when you run `bin/rails db:migrate` on a fresh rails app
created with: `rails new appname --skip-active-record` you don't get a
`db/migrate` directory which results in this exception:

```
rails aborted!
Errno::ENOENT: No such file or directory @ dir_initialize - .../db/migrate
.../oss/sequel-rails/lib/sequel_rails/migrations.rb:9:in `migrate'
.../oss/sequel-rails/lib/sequel_rails/railties/database.rake:166:in `block (2 levels) in <top (required)>'
.../sandbox/appname/bin/rails:9:in `require'
.../sandbox/appname/bin/rails:9:in `<top (required)>'
.../sandbox/appname/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
```

With this fix SequelRails will catch this issue before it's too late and
gets to Sequel's migration logic (which assumes db/migrate exists). This
is the error produced now:

```
rails aborted!
The db/migrate directory doesn't exist, you need to create it.
.../oss/sequel-rails/lib/sequel_rails/migrations.rb:14:in `migrate'
.../oss/sequel-rails/lib/sequel_rails/railties/database.rake:166:in `block (2 levels) in <top (required)>'
.../sandbox/appname/bin/rails:9:in `require'
.../sandbox/appname/bin/rails:9:in `<top (required)>'
.../sandbox/appname/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
```

After following the instruction from the error `mkdir -p db/migrate`,
you'll then get this much friendlier error from Sequel::Migrator itself:

```
$ bin/rails db:migrate
rails aborted!
Sequel::Migrator::Error: No target version available, probably because no migration files found or filenames don't follow the migration filename convention
.../oss/sequel-rails/lib/sequel_rails/migrations.rb:11:in `migrate'
.../oss/sequel-rails/lib/sequel_rails/railties/database.rake:166:in `block (2 levels) in <top (required)>'
.../sandbox/appname/bin/rails:9:in `require'
.../sandbox/appname/bin/rails:9:in `<top (required)>'
.../sandbox/appname/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
```
olivierlacan added a commit to olivierlacan/sequel-rails that referenced this pull request Feb 26, 2018
This is essentially the same issue as TalentBox#156. An easy fix and useful
feedback for users who created a Rails app without ActiveRecord and
will not have any `db/` directory.

The feedback is:

```
$ bin/rails db:schema:dump
The db/ directory doesn't exist, please create it.
```

Compare to what happened before this commit:

```
$ bin/rails db:schema:dump
rails aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - .../sandbox/appname/db/schema.rb
.../oss/sequel-rails/lib/sequel_rails/railties/database.rake:26:in `initialize'
.../oss/sequel-rails/lib/sequel_rails/railties/database.rake:26:in `open'
.../oss/sequel-rails/lib/sequel_rails/railties/database.rake:26:in `block (3 levels) in <top (required)>'
.../sandbox/appname/bin/rails:9:in `require'
.../sandbox/appname/bin/rails:9:in `<top (required)>'
.../sandbox/appname/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:schema:dump
(See full trace by running task with --trace)
```
@JonathanTron
Copy link
Member

@olivierlacan This is a great improvement thanks!

@JonathanTron JonathanTron merged commit d74eccb into TalentBox:master Feb 26, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants