質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.96%

Railsチュートリアル2章 rails db:migrateのエラー

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,415

score 4

Railsチュートリアル マイグレートでのエラー

初めて質問させていただきます。
最近rubyの勉強を始め、railsのチュートリアルに挑戦しています。
rubyのバージョンは2.6.4p104、
railsのバージョンは5.1.6を使用しています。

発生している問題・エラーメッセージ

2章のリスト2.4でのマイグレートを実行した際に、
下のようなメッセージが出て完了できません。

rails aborted!
ArgumentError: wrong number of arguments (given 2, expected 0)
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

ここまでの工程は基本チュートリアルの記載のまま進め、
Gemfileの

group :production do
  gem 'pg', '0.20.0'
end


この部分のみ、rubyのバージョンが合わなかったので、

group :production do
  gem 'pg', '1.1.4'
end


に変更しています。

rails db:migrate:resetを試してみましたが、

rails aborted!
ArgumentError: wrong number of arguments (given 2, expected 0)
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)


上記のメッセージが出て上手く行きませんでした。

色々調べましたが、引数の数が合っていないことしか分からず、
根本的な解決方法がわかりませんでした。

原因がお分かりでしたら、ご教示いただけますと幸いです。
よろしくお願いいたします。

2019/09/17追記
マイグレーションファイルの中身は以下の通りです。

class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • winterboum

    2019/09/17 08:18

    う〜〜む。
    ですと私の知識を越えてますので、申し訳ない。

    キャンセル

  • no1knows

    2019/09/17 19:09

    マイグレーションファイルを提示いただけると回答がつきやすくなるかと思います。

    キャンセル

  • ROID0609

    2019/09/17 23:33

    かしこまりました。
    ご助言ありがとうございます。

    ファイルの中を追記いたします。
    よろしくおねがいします。

    キャンセル

回答 2

+1

こんにちは。解決済みとか、作り直しているならご容赦ください。

1.環境について

まず、お手元の開発環境はWindowsでしょうか?それとも、MacOSやCloud9のようなUnix系の環境でしょうか。

こちらによって、環境変数の設定方法が若干異なりますので、ご注意ください。
たとえばMacOSの場合、no1knowsさんがご提示してくださっている、set ではなくて export を使ったりします。

2. RAILS_ENVについて

チュートリアルでは、ローカルで開発しつつ実行する場合は、RAILS_ENV=development を前提にしています。
あえて明示していない場合も、developmentモードになります。

db:drop やdb:resetというデータベースをいったん削除する動きを支持した場合、productionモードの場合はデータ破壊を防ぐため、db:check_protected_environments でのチェックをします。

逆に、developmentモードではここはチェックしないと思います。

エラーメッセージにこの文言が出ているということは、RAILS_ENV=productionに設定しているということでしょうか?

このあたりでも変わってきますので、念のため確認してみてください。

3. config/database.yml について

こちらは、rails new をしたあと特にいじっていないでしょうか?

チュートリアルでお手元でコーディングする場合は、特に明示しない限りdevelopmentモードで、SQLite3というデータベースを使って動きます。

リスト 2.4にしたがって、rake db migrate を実行すると本来は db/development.sqlite3 というファイルが出来上がって、そこにデータが格納されるようになります。

pg(PostgreSQL用の設定)は、Herokuにデプロイする場合に効きますので、Gemfileを gem 'pg', '1.1.4' に変更したというところは、特に直接のエラー原因では無い気がします。

4. Migrationのファイルについて

rails generate scaffold User name:string email:string を実行したあとは、 db/migrate/YYYYMMDDHHmmss_create_users.rb といったファイルができるはずです。

それ以外になにか重複したり、別なファイルができていたりしていませんでしょうか?

以上、回答というよりは質問に近くなってしまっていますが、環境面含めて今一度ご確認いただけますでしょうか。
再作成してもまた同じになってしまう可能性もありますが、もし解決すればすぐ次に進めると思いますので。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/26 19:39

    私からの情報が不足していて申し訳ありません。
    OSはwindowsを使用しております。

    一度作り直してみましたが、同じエラーとなりました。

    RAILS_ENVをrails consoleから確認しましたが、developmentでした。
    config/database.ymlには一切触っておらず、Migrationファイルについても、
    重複や違うファイルが生成されているといったこともありませんでした。

    キャンセル

  • 2019/09/28 08:16 編集

    ご返信や環境の情報をありがとうございます。
    作り直しでも、エラーが発生なのですね。

    (1) --traceをつけて実行
    メッセージにある、--trace オプションを指定して実施ではいかがでしょうか?
    なにか原因がつかめそうなメッセージがでるかもしれません。

    ```
    $ RAILS_ENV=development rails db:reset --trace

    ** Invoke db:reset (first_time)
    ** Invoke db:drop (first_time)
    ** Invoke db:load_config (first_time)
    ** Invoke environment (first_time)
    ** Execute environment
    ** Execute db:load_config
    ** Invoke db:check_protected_environments (first_time)
    ** Invoke db:load_config
    ** Execute db:check_protected_environments
    ** Execute db:drop
    ** Invoke db:drop:_unsafe (first_time)
    ** Invoke db:load_config
    ** Execute db:drop:_unsafe
    Dropped database 'db/development.sqlite3'
    Dropped database 'db/test.sqlite3'
    ** Invoke db:setup (first_time)
    ** Invoke db:schema:load_if_ruby (first_time)
    ** Invoke db:create (first_time)
    ** Invoke db:load_config
    ** Execute db:create
    Created database 'db/development.sqlite3'
    Created database 'db/test.sqlite3'
    ** Invoke environment
    ** Execute db:schema:load_if_ruby
    ** Invoke db:schema:load (first_time)
    ** Invoke db:load_config
    ** Invoke db:check_protected_environments
    ** Execute db:schema:load
    -- create_table("users", {:force=>:cascade})
    -> 0.0416s
    -- create_table("users", {:force=>:cascade})
    -> 0.0036s
    ** Invoke db:structure:load_if_sql (first_time)
    ** Invoke db:create
    ** Invoke environment
    ** Execute db:structure:load_if_sql
    ** Invoke db:seed (first_time)
    ** Execute db:seed
    ** Invoke db:abort_if_pending_migrations (first_time)
    ** Invoke db:load_config
    ** Execute db:abort_if_pending_migrations
    ** Execute db:setup
    ** Execute db:reset
    ```

    こんな感じにはなります。

    キャンセル

0

一度、下記コマンドを試してから、rails db:migrateでいかがでしょうか?

set RAILS_ENV=production set DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop

https://qiita.com/Esfahan/items/75ade0233fe02ab04381

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/18 23:14 編集

    単純にコピペで実行できなかったので
    set RAILS_ENV=production
    set DISABLE_DATABASE_ENVIRONMENT_CHECK=1
    bundle exec rake db:drop
    この順番で実行してみたところ、最初2つは実行後特にメッセージはありませんでしたが、
    最後を実行したところ、

    rake aborted!
    ArgumentError: wrong number of arguments (given 2, expected 0)

    Tasks: TOP => db:drop => db:check_protected_environments
    (See full trace by running task with --trace)

    上記のメッセージがでて成功しませんでした。

    キャンセル

  • 2019/09/19 11:53

    そうでしたか。それでは下記を試していただいてもエラーが出るようであれば、

    bundle exec rake db:migrate

    僕のレベルではどこが原因かわからないです。
    個人的には、手戻りも少ないので、一度、アプリを作り直してみると良いかもしれません。

    https://railstutorial.jp/chapters/beginning?version=5.1#sec-the_hello_application

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.96%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る