3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails Docker 「Mysql2::Error: Table 'テーブル名' already exists」と「Couldn't find database client」 エラー解決

Last updated at Posted at 2020-08-25

#この記事でできること
・Dockerfileの記述をちょっと変えることで、データベースを操作できるようにする。

##環境
・Ruby 2.6.6, Rails 6.0.3.2
・Docker,Docker-compose(開発環境)

##抱えた問題
テーブルを削除できたと思って、再度同じテーブルを作成しようとしたら「すでにそのテーブルはありまっせ」エラーが出てきた。

qiita.rb
% docker-compose run --rm web rails db:migrate  

Mysql2::Error: Table 'news' already exists

##やったこと①
https://bokunonikki.net/post/2018/0214_rails_mysql_error/

参考URLの通りrails dbを実行してデータベースを操作しようとしたけど、またまたエラーが出た。。。

qiita.rb
% docker-compose run --rm web rails db         

Couldn't find database client: mysql, mysql5. Check your $PATH and try again.

##やったこと②
https://qiita.com/ryosk7/items/077ea98a88ec3df289c8#%E8%A7%A3%E6%B1%BA%E7%AD%96%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8B

webサーバー側のDockerfileにmysql-clientを入れていないからエラーになっていたようです。
参考URLを真似て早速以下のDockerfileでbuildをしてみたが、buildに失敗する。。。
なんでや?????

Dockerfile
FROM ruby:2.6

# install package to docker container
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev \
    && apt-get install apt-transport-https \
    && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
    && apt-get update && apt-get install -y yarn \
    && curl -sL https://deb.nodesource.com/setup_10.x | bash - \
    && apt-get install -y nodejs mysql-client \   #mysql-clientを追記
    && mkdir /myapp

WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
qiita.rb
E: Package 'mysql-client' has no installation candidate

###エラー原因
「パッケージ:'mysql-client' のインストール候補がありません」エラーが出てるみたい。

##やったこと③
https://qiita.com/aseanchild1400/items/d3580366054fee3d2703#%E5%8E%9F%E5%9B%A0%E3%81%9D%E3%81%AE%EF%BC%92mysql-client-%E3%81%AF-mariadb-client-%E3%81%AB%E7%B5%B1%E5%90%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%97%E3%81%BE%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B

mysql-clientはmariadb-clientに統合されていて、mysql-clientは使えないっぽい!!
ということで、Dockerfile内のmysql-clientを、mariadb-clientに変更して再度buildしまっせ!!

Dockerfile
FROM ruby:2.6

#~~~~  省略  ~~~~

    && apt-get install -y nodejs mariadb-client \   #mariadb-clientに変更

#~~~~  省略  ~~~~
% docker-compose build   

なんやかんや

Successfully built

##これでmyaqlにログインできる

% docker-compose run --rm web rails db
#パスワードが求められるからパスワードを入力

SHOW TABLES;でテーブル一覧をチェック
該当のテーブルがあることを確認。

MySQL [myapp_development]> SHOW TABLES;
+------------------------------+
| Tables_in_myapp_development  |
+------------------------------+
| news                         |
+------------------------------+
18 rows in set (0.009 sec)

drop table テーブル名;でテーブル一を削除


MySQL [myapp_development]> drop table news;
Query OK, 0 rows affected (0.311 sec)

##まとめ
テーブルを削除するだけでもだいぶ時間がかかりましたな。。。
Dockerfileをいじるだけでできることが増えるのはなんか楽しい。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?