- 投稿日:2021-09-01T20:40:15+09:00
議事録ファイルをPython正規表現置換でDBに突っ込むINSERT文を作る
例えば、こんな文章 第1回 スーパーシティ型国家戦略特別区域の区域指定に関する専門調査会(議事要旨) (議事本題の前の部分や、フッタの「第1回 スーパーシティ型国家戦略特別区域の区域指定に関する専門調査会」は削除、前半数ページ抜粋) ○喜多参事官 ただいまより「スーパーシティ型国家戦略特別区域の区域指定に関する専 門調査会」を開会いたします。 会議の出席者はお手元の資料を御覧ください。 初めに、坂本大臣より発言をよろしくお願いいたします。 ○坂本大臣 本日は、お集まりいただき誠にありがとうございます。 近年、AIやビッグデータを活用し、社会の在り方を根本から変えるような都市設計の動 きが国際的に急速に進展しています。しかしながら、世界において、いまだ「丸ごと未来 都市」は実現されていません。我が国のスーパーシティは住民が参画し、住民目線で2030 年頃に実現される未来社会の先行実現を目指すものです。 そのポイントは3点あります。 1つ目は、生活全般にまたがる複数分野の先端的サービス 2つ目は、複数分野間でのデータ連携 3 3つ目は、大胆な規制改革であります。 スーパーシティは、国家戦略特区制度に基づきまして、大胆な規制改革を通して経済社 会の構造改革を牽引する役割であります。また、地域のデジタル化の拠点をつくる取組で もあり、今後9月に発足するデジタル庁とも密接に連携しながら、その取組を加速化して まいります。 今般、情報・デジタル等の専門家にも御参加いただきまして専門調査会を開催し、スー パーシティの区域指定について議論することとなりました。委員や出席者の皆様におかれ ましては、自治体からの提案や今後の進め方について忌憚のない御意見を賜り、スーパー シティ構想の実現に向け、御協力をいただければ幸いでございます。 本日は、どうぞよろしくお願いいたします。お世話になります。 ○喜多参事官 坂本大臣、ありがとうございました。 それでは、プレスの皆様は御退出願います。 (プレス退室) ○喜多参事官 早速議事に入ります。本日は第1回の会合ですので、最初に本専門調査会 の運営規則(案)についてお諮りしたいと存じます。 お手元の資料1を御覧ください。本運営規則におきましては、議事の進め方、議事内容 の公表等について定めております。運営規則案について、事前にお送りしておりますが、 このように定めさせていただきたいと存じますが、御異議等はございませんでしょうか。 (「異議なし」の声あり) ○喜多参事官 ありがとうございます。 続いて、議事2「地方公共団体からのスーパーシティの提案等」についてです。事務局 より説明いたします。 ○三浦審議官 内閣府の審議官の三浦でございます。今週着任いたしました。どうぞよろ しくお願いいたします。座って失礼いたします。 お手元の資料2を御覧ください。横長のパワーポイントでございます。 1ページはこれまでのスケジュール、これは復習でございます。去年9月1日に国家戦 略特区法が施行され、去年の年末、12月25日に公募を開始し、4月16日に公募を締め切っ て31の団体から提案があり、5月には地方公共団体のヒアリングを実施したということで ございます。 2ページ目を御覧ください。今申し上げた31の自治体を地理的にプロットすると、この ような感じです。北から南まで幅広く御提案をいただいているという形でございます。 内容でございますけれども、3ページを御覧ください。内容の例ということで、これは 先端的サービスの分野別に横串で7つの分野に分けて整理しております。 1つ目は左上の箱ですけれども、移動・物流分野、左上の箱です。中に項目が並んでお りますけれども、自動運転をはじめ、自動というキーワード、ドローンというキーワード、 4 空飛ぶ車、MaaS、カーシェアリング、この辺がキーワードになっています。 ②で医療・介護の箱は遠隔医療から始まって、ほかに遠隔服薬指導、ウェアラブル端末、 IoT、パーソナルレコード、AIの活用、ドローン、こういった辺りがキーワードです。 その横は③デジタル・ガバメントで、マイナンバーの活用、インターネット投票の実施。 左下に行っていただいて、④はエネルギー・環境で、これは太陽光をはじめとした再生 可能エネルギー、マイクログリッド、水素エネルギー等のカーボンニュートラル関係、EV カーシェアリングといった話。 その右は⑤防災ということで、位置情報を使って避難誘導していく話とか、インフラ点 検ロボット、また、ドローン、ロボット等の活用といったこと。 その右、⑥教育・研究開発の箱が一番右の列の真ん中ですけれども、これは遠隔授業、 オンライングローバル教育、AIデータによる個別最適化といった話。 右下は⑦支払い・その他ということで、キャッシュレス以下、並べております。 これらがそれぞれ31の自治体の提案にどう盛り込まれているというのを4ページ以降に 参考でつけております。細かくなりますので個々の説明は割愛いたしますけれども、今申 し上げた分野1つだけというよりは、各自治体さんは組み合わせて御提案いただいており ます。ちょっと字が細かいですけれども、真ん中の列に星取表的に整理しております。幾 つか複数の分野を組み合わせて御提案をいただいておりますが、組み合わせ方、あるいは それを束ねるコンセプトは、それぞれの自治体の特徴に応じて設定されています。また、 事業を進めるに当たって必要な規制改革の提案を、たくさんあるのでほんの一部ですけれ ども、一番右の列に記載しております。 最後に11ページを見ていただいて、これらの提案をめぐって、地方公共団体からヒアリ ングをいただきました。各40分程度、Web形式でヒアリングをいただいて、ワーキンググル ープ有識者の皆様、情報・デジタル、個人情報保護の専門家に御参加をいただいて、自治 体からは首長以下皆様に御参加いただいたということであります。 実績・スケジュールは黄色の箱のとおりということでございます。 以上、私からの御説明となります。ありがとうございました。 ○喜多参事官 ありがとうございました。 続いて、議事3「地方公共団体からのヒアリング結果」についてです。 ただいま、事務局より説明があったとおり、5月に自治体からヒアリングを実施いたし ました。その講評の結果につきまして、資料3に基づき特区ワーキンググループ座長の八 田委員と本日御出席いただいておりますワーキンググループ座長代理の原様より講評の結 果の御説明をお願いいたします。 ○八田委員 ありがとうございます。 それでは、講評の結果を私のから、かいつまんで御説明いたします。 先ほど大臣がおっしゃいましたように、まずデータ連携の基盤がきちんとしていて、デ 第1回 スーパーシティ型国家戦略特別区域の区域指定に関する専門調査会 ジタル化の拠点に将来なるという要件がございますが、ここに関しては専門家の委員に後 で御説明をお願いいたします。 ワーキングの私どもが特に注視したのは、どれだけきちんとした岩盤規制の改革を目指 しているかということであります。 その一つの基準としては、住民合意を要する規制改革をするというのがあります。例え ば、安全性を理由にこれまで阻止されていた規制改革を、住民が、安全性に関するリスク を受け入れても、改革すべきだと合意するならば、非常に大きな岩盤規制改革を行えます。 そういう規制の改革を含むということが一つの基準です。 もう一つは、複数の分野でデータ基盤を活用してスーパーシティに相応しいものをつく ろうということです。 結果的に今回の提案は、改革の規制の規模が小さかったり、本当に住民合意を必要とす る改革ではなかったりといった問題を抱えていました。そこで、本来の制度趣旨に立ち返 って、提案自治体において提案内容の見直しをしていただいて、その後、ワーキンググル ープにおいて二次ヒアリングをし、その過程でハンズオンでいろいろな助言をしていくべ きではないかということが結果でございます。 以上です。原委員、補足をお願いします。 これを INSERT INTO `polilink_api_meetingspeech` (`id`, `order`, `speaker`, `speech`, `description`, `council_id`, `council_meeting_id`) VALUES , 'a963c26aaa934abfaef70d2cc929e3fb', '7e0291703a9f42ca96860013d89f8644'), (REPLACE(uuid(), '-', ''),'〇' ,'喜多参事官 ' ,'ただいまより「スーパーシティ型国家戦略特別区域の区域指定に関する専門調査会」を開会いたします。 会議の出席者はお手元の資料を御覧ください。 初めに、坂本大臣より発言をよろしくお願いいたします。' , '' , 'a963c26aaa934abfaef70d2cc929e3fb', '7e0291703a9f42ca96860013d89f8644'), (REPLACE(uuid(), '-', ''),'〇' ,'坂本大臣 ' ,'本日は、お集まりいただき誠にありがとうございます。 近年、AIやビッグデータを活用し、社会の在り方を根本から変えるような都市設計の動きが国際的に急速に進展しています。しかしながら、世界において、いまだ「丸ごと未来都市」は実現されていません。我が国のスーパーシティは住民が参画し、住民目線で2030年頃に実現される未来社会の先行実現を目指すものです。 そのポイントは3点あります。 1つ目は、生活全般にまたがる複数分野の先端的サービス 2つ目は、複数分野間でのデータ連携 3つ目は、大胆な規制改革であります。 スーパーシティは、国家戦略特区制度に基づきまして、大胆な規制改革を通して経済社会の構造改革を牽引する役割であります。また、地域のデジタル化の拠点をつくる取組でもあり、今後9月に発足するデジタル庁とも密接に連携しながら、その取組を加速化してまいります。 今般、情報・デジタル等の専門家にも御参加いただきまして専門調査会を開催し、スーパーシティの区域指定について議論することとなりました。委員や出席者の皆様におかれましては、自治体からの提案や今後の進め方について忌憚のない御意見を賜り、スーパーシティ構想の実現に向け、御協力をいただければ幸いでございます。 本日は、どうぞよろしくお願いいたします。お世話になります。' , '' , 'a963c26aaa934abfaef70d2cc929e3fb', '7e0291703a9f42ca96860013d89f8644'), (REPLACE(uuid(), '-', ''),'〇' ,'喜多参事官 ' ,'坂本大臣、ありがとうございました。 それでは、プレスの皆様は御退出願います。(プレス退室)' , '' , 'a963c26aaa934abfaef70d2cc929e3fb', '7e0291703a9f42ca96860013d89f8644'), (REPLACE(uuid(), '-', ''),'〇' ,'喜多参事官 ' ,'早速議事に入ります。本日は第1回の会合ですので、最初に本専門調査会の運営規則(案)についてお諮りしたいと存じます。 お手元の資料1を御覧ください。本運営規則におきましては、議事の進め方、議事内容の公表等について定めております。運営規則案について、事前にお送りしておりますが、このように定めさせていただきたいと存じますが、御異議等はございませんでしょうか。(「異議なし」の声あり)' , '' , 'a963c26aaa934abfaef70d2cc929e3fb', '7e0291703a9f42ca96860013d89f8644'), (REPLACE(uuid(), '-', ''),'〇' ,'喜多参事官 ' ,'ありがとうございます。 続いて、議事2「地方公共団体からのスーパーシティの提案等」についてです。事務局より説明いたします。' , '' , 'a963c26aaa934abfaef70d2cc929e3fb', '7e0291703a9f42ca96860013d89f8644'), (REPLACE(uuid(), '-', ''),'〇' ,'三浦審議官 ' ,'内閣府の審議官の三浦でございます。今週着任いたしました。どうぞよろしくお願いいたします。座って失礼いたします。 お手元の資料2を御覧ください。横長のパワーポイントでございます。 1ページはこれまでのスケジュール、これは復習でございます。去年9月1日に国家戦略特区法が施行され、去年の年末、12月25日に公募を開始し、4月16日に公募を締め切って31の団体から提案があり、5月には地方公共団体のヒアリングを実施したということでございます。 2ページ目を御覧ください。今申し上げた31の自治体を地理的にプロットすると、このような感じです。北から南まで幅広く御提案をいただいているという形でございます。 内容でございますけれども、3ページを御覧ください。内容の例ということで、これは先端的サービスの分野別に横串で7つの分野に分けて整理しております。 1つ目は左上の箱ですけれども、移動・物流分野、左上の箱です。中に項目が並んでおりますけれども、自動運転をはじめ、自動というキーワード、ドローンというキーワード、空飛ぶ車、MaaS、カーシェアリング、この辺がキーワードになっています。 ②で医療・介護の箱は遠隔医療から始まって、ほかに遠隔服薬指導、ウェアラブル端末、IoT、パーソナルレコード、AIの活用、ドローン、こういった辺りがキーワードです。 その横は③デジタル・ガバメントで、マイナンバーの活用、インターネット投票の実施。 左下に行っていただいて、④はエネルギー・環境で、これは太陽光をはじめとした再生可能エネルギー、マイクログリッド、水素エネルギー等のカーボンニュートラル関係、EVカーシェアリングといった話。 その右は⑤防災ということで、位置情報を使って避難誘導していく話とか、インフラ点検ロボット、また、ドローン、ロボット等の活用といったこと。 その右、⑥教育・研究開発の箱が一番右の列の真ん中ですけれども、これは遠隔授業、オンライングローバル教育、AIデータによる個別最適化といった話。 右下は⑦支払い・その他ということで、キャッシュレス以下、並べております。 これらがそれぞれ31の自治体の提案にどう盛り込まれているというのを4ページ以降に参考でつけております。細かくなりますので個々の説明は割愛いたしますけれども、今申し上げた分野1つだけというよりは、各自治体さんは組み合わせて御提案いただいております。ちょっと字が細かいですけれども、真ん中の列に星取表的に整理しております。幾つか複数の分野を組み合わせて御提案をいただいておりますが、組み合わせ方、あるいはそれを束ねるコンセプトは、それぞれの自治体の特徴に応じて設定されています。また、事業を進めるに当たって必要な規制改革の提案を、たくさんあるのでほんの一部ですけれども、一番右の列に記載しております。 最後に11ページを見ていただいて、これらの提案をめぐって、地方公共団体からヒアリングをいただきました。各40分程度、Web形式でヒアリングをいただいて、ワーキンググループ有識者の皆様、情報・デジタル、個人情報保護の専門家に御参加をいただいて、自治体からは首長以下皆様に御参加いただいたということであります。 実績・スケジュールは黄色の箱のとおりということでございます。 以上、私からの御説明となります。ありがとうございました。' , '' , 'a963c26aaa934abfaef70d2cc929e3fb', '7e0291703a9f42ca96860013d89f8644'), (REPLACE(uuid(), '-', ''),'〇' ,'喜多参事官 ' ,'ありがとうございました。 続いて、議事3「地方公共団体からのヒアリング結果」についてです。 ただいま、事務局より説明があったとおり、5月に自治体からヒアリングを実施いたしました。その講評の結果につきまして、資料3に基づき特区ワーキンググループ座長の八田委員と本日御出席いただいておりますワーキンググループ座長代理の原様より講評の結果の御説明をお願いいたします。' , '' , 'a963c26aaa934abfaef70d2cc929e3fb', '7e0291703a9f42ca96860013d89f8644'), (REPLACE(uuid(), '-', ''),'〇' ,'八田委員 ' ,'ありがとうございます。 それでは、講評の結果を私のから、かいつまんで御説明いたします。 先ほど大臣がおっしゃいましたように、まずデータ連携の基盤がきちんとしていて、デ第1回 スーパーシティ型国家戦略特別区域の区域指定に関する専門調査会ジタル化の拠点に将来なるという要件がございますが、ここに関しては専門家の委員に後で御説明をお願いいたします。 ワーキングの私どもが特に注視したのは、どれだけきちんとした岩盤規制の改革を目指しているかということであります。 その一つの基準としては、住民合意を要する規制改革をするというのがあります。例えば、安全性を理由にこれまで阻止されていた規制改革を、住民が、安全性に関するリスクを受け入れても、改革すべきだと合意するならば、非常に大きな岩盤規制改革を行えます。そういう規制の改革を含むということが一つの基準です。 もう一つは、複数の分野でデータ基盤を活用してスーパーシティに相応しいものをつくろうということです。結果的に今回の提案は、改革の規制の規模が小さかったり、本当に住民合意を必要とする改革ではなかったりといった問題を抱えていました。そこで、本来の制度趣旨に立ち返って、提案自治体において提案内容の見直しをしていただいて、その後、ワーキンググループにおいて二次ヒアリングをし、その過程でハンズオンでいろいろな助言をしていくべきではないかということが結果でございます。 以上です。原委員、補足をお願いします。' こんなSQLに置換します。 (正しいSQLにするには、このあと、6行目を削除し、最終行に固定2行をコピペ追加して、末尾を「;」にして仕上げます) replacer.py import re file_name = "./text.txt" with open(file_name, encoding="utf-8") as f: data_lines = f.read() # 文字列置換 data_lines = re.sub(r'^\d*\n', r"", data_lines, flags=re.MULTILINE) #① data_lines = re.sub(r'〇', r'○', data_lines, flags=re.MULTILINE) #② #2種類の〇 data_lines = re.sub(r'(○)(.* )', r"\n\1\n\n\2\n\n", data_lines, flags=re.MULTILINE) #③ data_lines = re.sub(r'(()(.* )', r"\n\1\n\n\2\n\n", data_lines, flags=re.MULTILINE) data_lines = re.sub(r'(<)(.* )', r"\n\1\n\n\2\n\n", data_lines, flags=re.MULTILINE) data_lines = re.sub(r'\n\n', r"★", data_lines, flags=re.MULTILINE) #④ data_lines = re.sub(r'\n', r"", data_lines, flags=re.MULTILINE) #⑤ data_lines = re.sub(r'★', r"\n", data_lines, flags=re.MULTILINE) #⑥ data_lines = re.sub(r'^', r",'", data_lines, flags=re.MULTILINE) #⑦ data_lines = re.sub(r'$', r"'", data_lines, flags=re.MULTILINE) #⑧ data_lines = re.sub(r",'○'", r", ''\n, 'a963c26aaa934abfaef70d2cc929e3fb', '7e0291703a9f42ca96860013d89f8644'),\n (REPLACE(uuid(), '-', ''),'〇'", data_lines, flags=re.MULTILINE) #⑨ data_lines = re.sub(r"^, ''", r"INSERT INTO `polilink_api_meetingspeech` (`id`, `order`,\n `speaker`,\n `speech`,\n `description`, `council_id`, `council_meeting_id`)\n VALUES", data_lines) #⑩ # 同じファイル名で保存 with open(file_name, mode="w", encoding="utf-8") as f: f.write(data_lines) ①各ページのページ番号部分を削除 ②人名の前についている◯がたまにぶれているので、統一 ③◯と次の半角空白を選択し、その前に改行、途中に改行2つ、後ろに改行2つをセット 議事録によって、人名の前が◯じゃない場合もあるので、その場合はその文字で同様の処理 ④改行2つを★に置換(これが最終的に改行にしたいもの=DBカラムに対応) ⑤改行を削除(PDF上の改行は単語を切ってしまったりして、検索しにくくなるので) ⑥★を改行に戻す ⑦文頭に「,'」 ⑧文末に「'」 ⑨◯の部分=名前カラムの前にその他固定的に付加するカラムの部分を追記 ⑩全体の先頭に、INSERT文追記(ここだけは、flags=re.MULTILINE を付けないことにより、全体の先頭1回だけ処理) こんな感じです。 なんですかこれは?? まだまだ開発中ですが、これのデータ登録を支援するスクリプトでした。
- 投稿日:2021-09-01T15:17:26+09:00
Railsポートフォリオ【Tamari-Ba】についてまとめてみた
『Tamari-Ba』とは アプリ名: Tamari-Ba 「たまりば」と読みます。バイク乗り達が自分のバイク、好きな道、きつかった道、楽しかった道の駅等を語り合う「たまり場」をイメージして作成。 いつも行くあのカフェ、あの道の駅等の集まってダベれる「たまり場」のように好きなスポットについて語り合えるようなアプリに仕上げました。 制作背景 友人とバイクでツーリングに行く際に、目的地までの道が重要なのだが道を紹介するサイトが少ない(もしくはバイク乗りなら誰でも知っているような内容しかなかった)という課題から、 道やスポットを紹介し、道やスポットについて交流するWEBアプリを作ろうと考えました。 使用技術 フロントエンド HTML / CSS(Sass) Bootstrap 4.5 バックエンド Ruby 2.7.2 Ruby on Rails 6.1.3 JavaScript GoogleMapsAPI (Maps JavaScript API, Geocoding API) インフラ MySQL 5.7 Nginx 1.20 Puma 5.3.2 AWS (VPC, EC2, S3) CircleCI Docker 20.10.8 Supervisor 機能一覧 ユーザー関連 機能 1 アカウント登録/削除機能 2 ログイン/ログアウト機能 3 ゲストログイン機能 4 アカウント情報編集機能 5 ユーザー情報 - 都道府県 6 ユーザー一覧 投稿機能 機能 1 投稿機能(CRUD) 2 GoogleMaps表示機能 3 マップ検索機能 4 座標取得/保存機能 5 マーカー設置機能 6 コメント機能 7 いいね機能 8 投稿検索 9 投稿一覧 できること 1. トップページ ログイン状態に応じて、リンクボタンを表示分けさせています。 非ログイン状態:ログイン/ゲストログイン ログイン状態:アプリトップ 最新3件分の投稿を表示 機能の概要を説明 投稿詳細イメージを表示 2. 新規投稿 マップの検索でマップ表示範囲を移動できます。 任意の箇所をクリックすることでマーカーを設置できます。 座標がデータベースに保存されます。 その他にも画像保存、タイトル、説明文を入力することが可能です。 3. 投稿一覧 投稿一覧を見ることができます。 検索機能があるので、投稿を検索することができます。 15投稿でページネーションが適用されます。 4. 投稿詳細 保存された座標を元に地図上にマーカーを表示します。 投稿者本人がログインしている場合には編集/削除ボタンが表示され実行できます。 保存された画像が表示されます。 コメント欄に入力して「コメントする」をクリックすることで、コメント可能です。 工夫したこと/苦労したこと 工夫したこと 工夫したことは主に3つあります。 - 新規投稿時に、マーカーを付けたい箇所を簡単に探せるようにマップ内の検索機能を実装 - Dockerでの環境構築やCircleCIを利用し、環境依存の解消やデプロイの自動化でデプロイ作業の効率化を実現 - ポートフォリオなのでアクセス負荷はないことを見込み、コスト削減のためRDSを使わずにEC2にMySQLを設置。万が一の負荷に起因するMySQL停止の500エラーに対応するため、swap領域を作り対応。 苦労したこと 苦労したことは主に以下の2つです。 - GoogleMapsAPIの実装。GoogleMapsの機能が多彩過ぎる分、自分が実装したい機能を実現するためには公式ドキュメントを読み込み、正しく理解する必要がありました。この公式ドキュメントを読み込む力は以下の実装にも活きています。 - Docker/CircleCI等のツール関連の学習です。AWS, CircleCI, Docker環境構築について1ヶ月未満でキャッチアップし実装しました。 これらのことについては、理解定着のため記事にまとめています。 記事のリンクは本記事の最後尾付近に貼っておりますのでぜひご覧ください。 ER図 インフラ構成図 ポートフォリオなので大きなアクセス負荷はかからないという見込みからコスト削減のためRDSは使わずに構築しました。 まとめ ポートフォリオとしてアウトプットすることで自分の実力がメキメキ付いてくるのを実感しました。 とはいえ、まだつけたい機能やフロント周りは改善の余地があるため転職活動を続けていく中で改善していこうと思います。 投稿記事 ポートフォリオ関連 ポートフォリオ作成に当たり、理解が難しかったもの、知識として足りないと思ったものに関しては記事にまとめています。 - 【GoogleMapsAPI】Rails6アプリにMapsJavaScript APIとGeocoding APIを導入してみた - MySQLが起動失敗による500エラーの解消 - 【Docker】Rails6/MySQLのコンテナを作って開発環境を構築 - 【Amazon Linux2】【Rails】Nginxをpumaのunixドメインソケットでリバースプロキシする設定 - 【CircleCI】AWSにデプロイしたRails6アプリをCircleCIで自動デプロイ - 【Rails6】rails sで起動できなくなった話 その他記事 以下は実案件受注やLT会の記事です。 - Rails6でStripe Checkoutを実装 (開発環境/TESTモード) - 【Ruby】変数と定数のあれこれ - 【SQL書籍勉強会】SQLとは? - 【SQL書籍勉強会】SQLの集計 - 【SQL書籍勉強会】テーブル設計
- 投稿日:2021-09-01T11:21:32+09:00
rails serverした時に(ActiveRecord::ConnectionNotEstablished Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2))と出る時の対処法
やりたいこと rails s時ブラウザに出るエラーを消したい ※この記事では、MacOS Xを使用しています。 問題 rails sしたら以下エラーがブラウザに表示 ActiveRecord::ConnectionNotEstablished Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 原因 調べると ・mysql.sockファイルがない ・pidファイルがない ・pidファイルに適切な権限が設定されていない この3つを対処します ※mysql.sockを作成したらサーバー起動できる場合もあるようですが、私の場合は3つやって解決できました 解決策 mysql.sockがないので作成 $ sudo touch /tmp/mysql.sock mysql再起動(mysql起動してないとrails sできないので忘れず起動!!) $ sudo mysql.server restart 今度はpidファイルがないと言われた $ sudo mysql.server restart ERROR! MySQL server process #13658 is not running! Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/****.pid). なのでpidファイル作成 ※****には マシンのホスト名 を入力。 ※ホスト名はuname -nで確認できます $ touch /usr/local/var/mysql/****.local.pid しても依然エラー ERROR! MySQL server PID file could not be found! Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/****.pid). ※念のためcdで /usr/local/var/mysqlまで移動しlsで確認 →pidファイルあった。なので原因は別 以下のコマンドで、/user/local/var/mysql以下のファイルの所有者をすべて_mysqlにする sudo chown -R _mysql:_mysql /usr/local/var/mysql/ すると username@**** mysql % sudo mysql.server restart ERROR! MySQL server PID file could not be found! Starting MySQL .. SUCCESS! なぜかnot foundですがいけました!!! 無事railsサーバー起動できました 参考記事 ・mysqlが起動できない(Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)) ・mysql 起動時のThe server quit without updating PID file エラーの回避法
- 投稿日:2021-09-01T08:04:36+09:00
Docker上にMySQLサーバー構築時につまずいたエラー
今回の経緯 Ruby on railsでバッチ処理を行うにあたって、Dockerをインストールしました。 DBはMySQLを使用し、MySQLのデータベースサーバーをDocker上に構築。 問題なく、環境構築を終えローカルPCからDockerのMySQLコンテナへ接続できるようにしました。 環境構築が完了し、いよいよRailsでテーブル作成。 マイグレーションファイルを編集後、データベースに反映させようとしたところ発生したエラーでした。 環境 ・Mac OS ・Rails 6.0.4.1 ・Docker 20.10.8 ・mysql2 0.5.3 エラー内容 % bin/rails db:migrate を実行したところ、以下のエラーが発生。 -- Crash Report log information -------------------------------------------- See Crash Report log file under the one of following: * ~/Library/Logs/DiagnosticReports * /Library/Logs/DiagnosticReports for more details. Don't forget to include the above Crash Report log file in bug reports. 〜中略〜 -- Control frame information ----------------------------------------------- c:0042 p:---- s:0236 e:000235 CFUNC :connect c:0041 p:0614 s:0224 e:000223 METHOD /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90 [FINISH] c:0040 p:---- s:0210 e:000209 CFUNC :new 〜中略〜 [NOTE] You may have encountered a bug in the Ruby interpreter or extension libraries. Bug reports are welcome. For details: https://www.ruby-lang.org/bugreport.html [IMPORTANT] Don't forget to include the Crash Report log file under DiagnosticReports directory in bug reports. 原因を調べてみると、MySQLのバージョンが原因なのではないかとのことでした。 その後バージョン変更のためにコマンドを実行するも、他のエラーが発生し、そのために再度別のコマンドを実行しの繰り返しでドツボにハマっていきました。 あれやこれやをやっていた矢先、最終的に以下のxcodeを再インストールを実施して出てしまったエラーに1番苦戦したかたちになってしまいました。 以下の3つのコマンドを実行し、xcodeを再インストールしました。 $ sudo rm -rf $(xcode-select -print-path) $ sudo rm -rf /Library/Developer/CommandLineTools $ xcode-select --install xcode再インストール完了後、 $ yarn install 1 error generated. make: *** [Release/obj.target/binding/src/binding.o] Error 1 gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit (/Users/shigatakuma/projects/node_modules/@rails/webpacker/node_modules/node-gyp/lib/build.js:262:23) gyp ERR! stack at ChildProcess.emit (node:events:394:28) gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12) gyp ERR! System Darwin 20.6.0 gyp ERR! command "/usr/local/Cellar/node/16.8.0/bin/node" "/Users/shigatakuma/projects/node_modules/@rails/webpacker/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library=" gyp ERR! cwd /Users/shigatakuma/projects/node_modules/@rails/webpacker/node_modules/node-sass gyp ERR! node -v v16.8.0 gyp ERR! node-gyp -v v3.8.0 gyp ERR! not ok 解決した方法 以下の3つのコマンドでMySQLの状況を調べます。 $ brew search mysql $ which mysql $ ps aux | grep mysql ↓実行結果 $ brew search mysql ==> Formulae automysqlbackup mysql-client@5.7 mysql@5.6 ✔ mysql ✔ mysql-connector-c++ mysql@5.7 mysql++ mysql-sandbox mysqltuner mysql-client mysql-search-replace qt-mysql ==> Casks homebrew/cask/mysql-connector-python homebrew/cask/navicat-for-mysql homebrew/cask/mysql-shell homebrew/cask/sqlpro-for-mysql homebrew/cask/mysql-utilities $ which mysql /usr/local/bin/mysql $ ps aux | grep mysql 1685 0.0 0.0 4920184 604 ?? S 20 821 1:24.21 /usr/local/opt/mysql@5.6/bin/mysqld --basedir=/usr/local/opt/mysql@5.6 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/opt/mysql@5.6/lib/plugin --log-error=shigataumanoAir.err --pid-file=shigataumanoAir.pid 1566 0.0 0.0 4280140 4 ?? S 20 821 0:00.05 /bin/sh /usr/local/opt/mysql@5.6/bin/mysqld_safe --datadir=/usr/local/var/mysql 92976 0.0 0.0 4259000 220 s002 U+ 9:50AM 0:00.00 grep mysql 以上のコマンドから、 bundle installのときにMySQL5.6の設定を参照してgemがインストールされていることが原因と判明しました。 以下のコマンドでgem mysql2をアンインストールします。 $ bundle exec gem uninstall mysql2 さらにgemをインストールする際の設定を変更します。 $ bundle config --local build.mysql2 "--with-mysql-config=/usr/local/bin/mysql_config --with-ldflags=-L/usr/local/opt/openssl@1.1/lib --with-cppflags=-I/usr/local/opt/openssl@1.1/include" 再インストール後、rails db:migrateを実行します。 $ bundle install $ bin/rails db:migrate 今度は以下のエラー文が出力されました。 rails aborted! Mysql2::Error::ConnectionError: Access denied for user 'batch_user'@'localhost' (using password: YES) /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `new' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `mysql2_connection' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1125:in `retrieve_connection' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_handling.rb:221:in `retrieve_connection' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/connection_handling.rb:189:in `connection' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/tasks/database_tasks.rb:238:in `migrate' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/railties/databases.rake:86:in `block (3 levels) in <main>' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/railties/databases.rake:84:in `each' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/activerecord-6.0.4.1/lib/active_record/railties/databases.rake:84:in `block (2 levels) in <main>' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/railties-6.0.4.1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/railties-6.0.4.1/lib/rails/commands/rake/rake_command.rb:20:in `perform' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/railties-6.0.4.1/lib/rails/command.rb:48:in `invoke' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/railties-6.0.4.1/lib/rails/commands.rb:18:in `<main>' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi' /Users/shigatakuma/projects/.bundle/ruby/2.6.0/gems/bootsnap-1.8.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require' bin/rails:4:in `<main>' Tasks: TOP => db:migrate (See full trace by running task with --trace) ローカルで起動しているMySQLへの接続が優先されているかもしれないとのこと。 docker-compose.ymlファイル内記載のポートを変更(3306 → 3307) version: '3.8' services: mysql: image: mysql:8.0 volumes: - ./tmp/mysql:/var/lib/mysql ports: # - 3306:3306 - 3307:3306 environment: - MYSQL_ROOT_PASSWORD=batch dockerの再起動 $ docker-compose down $ docker-compose up -d ここが重要ですが、MYSQL_PORTを指定してrails db:migrateを実行する必要があります。 $ MYSQL_PORT=3307 bin/rails db:migrate == 20210830030847 CreateUsers: migrating ====================================== -- create_table(:users, {:comment=>"ゲームのユーザー情報を管理するテーブル"}) -> 0.0742s == 20210830030847 CreateUsers: migrated (0.0743s) ============================= == 20210830030923 CreateUserScores: migrating ================================= -- create_table(:user_scores, {:comment=>"ユーザーがゲーム内で獲得した点数"}) -> 0.1328s == 20210830030923 CreateUserScores: migrated (0.1329s) ======================== == 20210830031004 CreateRanks: migrating ====================================== -- create_table(:ranks, {:comment=>"ゲーム内のランキング情報"}) -> 0.1475s == 20210830031004 CreateRanks: migrated (0.1476s) ============================= 上手くいきました!!