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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

Q&A

0回答

437閲覧

CircleCI上で発生する"Specified key was too long; max key length is 767 bytes"を解決したい

katahik

総合スコア79

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

0グッド

0クリップ

投稿2022/02/16 06:52

実現したいこと

閲覧いただきありがとうございます。
rails,docker,CircleCIを用いて開発を行っています。

CircleCIでテスト実行前にrails db:migrateを実行すると下記エラーが出てしまいます。

== 20191125043900 CreateUsers: migrating ====================================== -- create_table(:users, {:id=>:bigint, :unsigned=>true}) -> 0.0018s -- add_index(:users, :email, {:unique=>true}) rails aborted! StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: Specified key was too long; max key length is 767 bytes

エラーの原因はkeyの制限が最大の767byteを超えたことと認識しておりますが、どのようにCircleCI内で解決してよいかわからず、下に記載したとおり自分なりに修正してみましたが、うまくいきません。

解決策などご教示いただければ幸いです。

エラーの該当コード

config.yml

... - run: name: Database setup command: bundle exec rails db:migrate ...

コード

config.yml

version: 2.1 orbs: ruby: circleci/ruby@1.1.2 jobs: build: docker: - image: cimg/ruby:2.6.5 working_directory: ~/myapp/web steps: - checkout: path: ~/myapp - restore_cache: name: bundle install restore keys: - v1-dependencies-{{ checksum "Gemfile.lock" }} - v1-dependencies- - run: name: default mysql client install command: | sudo apt update sudo apt-get install default-mysql-client sudo apt-get install libmysqlclient-dev - run: name: bundle Install command: bundle check --path=vendor/bundle || bundle install --jobs=4 --retry=3 --path vendor/bundle - save_cache: name: bundle install save paths: - ./vendor/bundle key: v1-dependencies-{{ checksum "Gemfile.lock" }} test: docker: - image: cimg/ruby:2.6.5 - image: circleci/mysql:5.5 environment: MYSQL_DATABASE: 'ci_test' MYSQL_USER: 'root' MYSQL_ROOT_PASSWORD: 'rootpass' environment: BUNDLE_JOBS: "3" BUNDLE_RETRY: "3" APP_DATABASE_HOST: "127.0.0.1" RAILS_ENV: test TZ: "Asia/Tokyo" working_directory: ~/myapp/web steps: - checkout: path: ~/myapp - restore_cache: name: bundle install restore key: v1-dependencies-{{ checksum "Gemfile.lock" }} - run: name: default mysql client install command: | sudo apt update sudo apt-get install default-mysql-client sudo apt-get install libmysqlclient-dev - run: name: bundle install command: bundle check --path=vendor/bundle || bundle install --path vendor/bundle --clean --jobs 4 --retry 3 - run: name: RUN apt install tzdata command: sudo apt install tzdata - run: name: Database setup command: bundle exec rails db:migrate - run: name: Echo Test command: echo "CircleCI Test" - run: name: test command: bundle exec rake test workflows: version: 2 build_and_test: jobs: - build - test: requires: - build

Gemfile

source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.6.5' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 6.0.3', '>= 6.0.3.7' # Use mysql as the database for Active Record gem 'mysql2', '>= 0.4.4' # Use Puma as the app server gem 'puma', '~> 4.1' # Use SCSS for stylesheets gem 'sass-rails', '>= 6' # Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker gem 'webpacker', '~> 4.0' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.7' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use Active Model has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use Active Storage variant # gem 'image_processing', '~> 1.2' # jQuery gem "jquery-rails" gem 'rails-i18n', '~> 6' # enum i18n gem "enum_help" gem "config" gem 'faraday' gem 'acts_as_paranoid', '~> 0.6.0' gem 'http-cookie' gem 'kaminari' gem 'devise' gem 'devise_token_auth' gem 'devise-security' gem 'devise-two-factor', '~> 3.1' # AWS gem 'aws-sdk' # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.4.2', require: false gem 'composite_primary_keys' gem 'clamav-client', require: 'clamav/client' gem 'wovnrb' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of web drivers to run system tests with browsers gem 'webdrivers' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

試したこと

試したこと(1)

migrateする前にinnodbのrunを走らせる
config.yml

- run: name: innodb_file_format command: | echo '[mysqld]' | sudo sh -c 'cat >> /etc/mysql/my.cnf' echo 'innodb_file_format=Barracuda' | sudo sh -c 'cat >> /etc/mysql/my.cnf' echo 'innodb_file_per_table=1' | sudo sh -c 'cat >> /etc/mysql/my.cnf' echo 'innodb_large_prefix=1' | sudo sh -c 'cat >> /etc/mysql/my.cnf' sudo service mysql restart - run: name: Database setup command: bundle exec rails db:migrate


circleCIで実行

別なエラーが出現

mysql: unrecognized service Exited with code exit status 1

試したこと(2)

dependenciesとしてmigrateに追記

- run: name: Database setup command: bundle exec rails db:migrate dependencies: pre: - echo '[mysqld]' | sudo sh -c 'cat >> /etc/mysql/my.cnf' - echo 'innodb_file_format=Barracuda' | sudo sh -c 'cat >> /etc/mysql/my.cnf' - echo 'innodb_file_per_table=1' | sudo sh -c 'cat >> /etc/mysql/my.cnf' - echo 'innodb_large_prefix=1' | sudo sh -c 'cat >> /etc/mysql/my.cnf' - sudo service mysql restart


circleCIで実行

同じエラー

== 20191125043900 CreateUsers: migrating ====================================== -- create_table(:users, {:id=>:bigint, :unsigned=>true}) -> 0.0031s -- add_index(:users, :email, {:unique=>true}) rails aborted! StandardError: An error has occurred, all later migrations canceled: Mysql2::Error: Specified key was too long; max key length is 767 bytes

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問