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でシンタックスエラーが発生したためではないかと思われます。
※以下画像
以前、同様のエラーが発生し、その際はyamlファイル内のtest環境のデータベー名を変更したのですが、エラーの原因を突き止めたいこと、test環境のデータベース名を変えることで開発環境とテスト環境の結びつきがわかりにくくなること、を考えると、できれば解決したいとかんがえております。
皆様のご意見、御助言をいただければ幸いです。
環境
rails (6.0.3.7)
mysql2 (0.5.3)
spring (2.1.1)
spring-commands-rspec (1.0.4)