denisov_2023
@denisov_2023 (デニソフ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

rails db:migrate RAILS_ENV=testが実行できない

□解決したいこと

rails db:migrate RAILS_ENV=testが実行できません。アドバイスをいただければと思い投稿させていただきました。

なお、developmentではエラーは起きておりません。

□内容

rails db:migrate RAILS_ENV=test --trace

を実行すると、

** Invoke db:migrate (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Execute db:migrate

ここで止まってしまいます。

control + cで一度作業を停止し、ログを確認しました。(以下、最後の3行)

省略
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate

まずは、migrate:status で状況を確認しましたが、create likesがdownの状態でした。

rails rails db:migrate:status RAILS_ENV=test --trace
Status   Migration ID    Migration Name
--------------------------------------------------
   up     20210323145951  Devise create users
   up     20210331134218  Create tips
   up     20210403100758  Create active storage tablesactive storage
   up     20210417121435  Create comments
   up     20210429095154  Create tags
   up     20210429095830  Create tip tag relations
   up     20210509012613  Add image to tip
  down    20210526220618  Create likes

仮説・行なったこと1

ログより、bin/railsの3行目で止まっているため、そこでエラーが発生していると仮定し、fileの内容を見てみました。

bin/rails

#!/usr/bin/env ruby
begin
  load File.expand_path('../spring', __FILE__) #ここが原因か?
rescue LoadError => e
  raise unless e.message.include?('spring')
end
APP_PATH = File.expand_path('../config/application', __dir__)
require_relative '../config/boot'
require 'rails/commands'

3行目の内容がおかしいのかと思い、bin/rails について調べてみました。

https://song-of-life.hatenablog.com/entry/2017/04/24/224116

上記、参考では


load File.expand_path('../spring', __FILE__)
 springファイルがLoadErrorになった場合の処理

とあります。

当該記述はgem 'spring-commands-rspec'を導入した際に記述しました。

以前までbin/specは問題なく起動していたためこれが原因とは考えにくいですが、この記述を元に戻して再度実行してみます。

% bundle exec gem uninstal spring-commands-rspec
% bundle install

→全く別のエラーが発生しました。

rails db:migrate:status RAILS_ENV=test

Usage:
  rails new APP_PATH [options]

Options:
      [--skip-namespace], [--no-skip-namespace]              # Skip

<省略>

Note that the arguments specified in the .railsrc file don't affect the
    defaults values shown above in this help message.

Example:
    rails new ~/Code/Ruby/weblog

    This generates a skeletal Rails installation in ~/Code/Ruby/weblog.

↑このエラーの意味は以下の記事を参考にさせていただきましたが、

https://qiita.com/Leone/items/dc7f8ef2d5329d297e72

プロジェクトがないためrails new してくださいということだと思われます。

今回の趣旨とは違うため、この部分が直接の原因でないと想定できます。

仮説・行なったこと2

Sequelproにてデータベースの内容を確認しました。

development環境ではlikes テーブルが存在しますが、test環境ではlikesテーブルがありません。

マイグレーションが実行されていないこと以外は内容は同じですので、developmentとtestでシンタックスエラーが発生したためではないかと思われます。

※以下画像

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/43b9dbe3-46a0-4365-aedb-d42fd2533067/_2021-05-29_14.53.58.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8a05e4c3-ea24-492f-9c01-1c852157dd4d/_2021-05-29_14.54.07.png

以前、同様のエラーが発生し、その際はyamlファイル内のtest環境のデータベー名を変更したのですが、エラーの原因を突き止めたいこと、test環境のデータベース名を変えることで開発環境とテスト環境の結びつきがわかりにくくなること、を考えると、できれば解決したいとかんがえております。

皆様のご意見、御助言をいただければ幸いです。

環境

rails (6.0.3.7)
mysql2 (0.5.3)
spring (2.1.1)
spring-commands-rspec (1.0.4)

0

1Answer

Your answer might help someone💌