[RUBY] [Rails] Développement avec MySQL

Jusqu'à présent, j'ai créé et appris des applications Web Tous les DB ont utilisé le SQLite par défaut.

Si vous souhaitez définir l'environnement de production sur AWS lors de la création d'une nouvelle application cette fois, vous devez définir MySQL ... J'aimerais donc utiliser MySQL! Je suis encore un débutant, veuillez donc signaler toute erreur.

Qu'est-ce que MySQL

C'est la base de données la plus utilisée au monde et possède les fonctionnalités suivantes.

Différence avec SQLite

Le SGBDR utilisé par défaut avec Rails installé est ** SQLite ** SQLite a les fonctionnalités suivantes

Il semble préférable d'utiliser MySQL avec une énorme base de données

Essayez de développer avec MySQL

Rails utilise SQLite par défaut, donc Pour utiliser MySQL, spécifiez-le au démarrage

rails nouveau nom d'application--database=mysql

Peut être omis

rails nouveau nom d'application-d mysql

En faisant cela, il semble que le SGBDR puisse être changé en MySQL. Vérifiez le Gemfile au cas où ... Si non spécifié

Gemfile


# Use sqlite3 as the database for Active Record
gem 'sqlite3'

En revanche, si vous spécifiez

Gemfile


# Use mysql as the database for Active Record
gem 'mysql2', '>= 0.3.18', '< 0.5'

est devenu! !!

Mais le problème est ... rails new Application name -d Une erreur s'est produite lors de l'exécution de mysql. .. ..

・
・
(Beaucoup de journaux)
・

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/mariko/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/ext/mysql2
/Users/mariko/.rbenv/versions/2.6.5/bin/ruby -I /Users/mariko/.rbenv/versions/2.6.5/lib/ruby/2.6.0 -r ./siteconf20201104-33105-i9fwuc.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
-----
Using mysql_config at /usr/local/opt/[email protected]/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for SSL_MODE_DISABLED in mysql.h... yes
checking for SSL_MODE_PREFERRED in mysql.h... yes
checking for SSL_MODE_REQUIRED in mysql.h... yes
checking for SSL_MODE_VERIFY_CA in mysql.h... yes
checking for SSL_MODE_VERIFY_IDENTITY in mysql.h... yes
checking for MYSQL.net.vio in mysql.h... yes
checking for MYSQL.net.pvio in mysql.h... no
checking for MYSQL_ENABLE_CLEARTEXT_PLUGIN in mysql.h... yes
checking for SERVER_QUERY_NO_GOOD_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_NO_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_WAS_SLOW in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_ON in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_OFF in mysql.h... yes
checking for my_bool in mysql.h... yes
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/opt/[email protected]/lib
-----
creating Makefile

current directory: /Users/mariko/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/ext/mysql2
make "DESTDIR=" clean

current directory: /Users/mariko/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/mariko/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3 for inspection.
Results logged to /Users/mariko/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/extensions/x86_64-darwin-19/2.6.0/mysql2-0.5.3/gem_make.out

An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  mysql2
         run  bundle binstubs bundler
Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile.
         run  bundle exec spring binstub --all
Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.
       rails  webpacker:install
Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

Je vais le traduire pour le moment "Une erreur s'est produite lors de l'installation de mysql2 (0.5.3) et Bundler ne peut pas continuer." ···ne sait pas···. Je dois le battre pour le moment ...!

Solutions

Pour le moment, faites ce qui est écrit dans le journal

$ gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'

ERROR:  While executing gem ... (OptionParser::InvalidArgument)
    invalid argument: --source https://rubygems.org/

Installez MySQL sur Mac

J'ai complètement négligé la partie de l'installation de MySQL. Installez en vous référant à l'article suivant! Procédure pour installer MySQL sur Mac avec Homebrew

Installez avec la commande suivante

$ brew update
$ brew install mysql

Vérifiez s'il est installé

$ brew info mysql

mysql: stable 8.0.22 (bottled)
Open source relational database management system
https://dev.mysql.com/doc/refman/8.0/en/
Conflicts with:
  mariadb (because mysql, mariadb, and percona install the same binaries)
  percona-server (because mysql, mariadb, and percona install the same binaries)
/usr/local/Cellar/mysql/8.0.22 (294 files, 296.5MB) *
  Poured from bottle on 2020-11-04 at 13:55:11
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/mysql.rb
License: GPL-2.0
==> Dependencies
Build: cmake ✘
Required: [email protected] ✔, protobuf ✔
==> Caveats
We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
    mysql -uroot

To have launchd start mysql now and restart at login:
  brew services start mysql
Or, if you don't want/need a background service you can just run:
  mysql.server start
==> Analytics
install: 85,249 (30 days), 214,834 (90 days), 813,126 (365 days)
install-on-request: 83,371 (30 days), 209,508 (90 days), 784,193 (365 days)
build-error: 0 (30 days)

La version 8.0.22 a été installée!

Essayez de démarrer MySQL

$mysql.server start
Starting MySQL
 SUCCESS! 

Connectez et vérifiez le fonctionnement

$mysql -uroot

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

・ ・ ・ ・ Une autre erreur (pleurs) Est-ce inutile car il n'y a pas de mot de passe? Je pense que je vais le fixer pour le moment.

les paramètres de sécurité

$mysql_secure_installation

Enter password for user root:(Entrer le mot de passe)

Configurer un plug-in qui vérifie la force de votre mot de passe? "Y"

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: y

Sélectionnez un niveau de vérification.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Puisqu'il semble s'agir d'un environnement de production, sélectionnez 2. Si la force du mot de passe que vous avez entré précédemment ne correspond pas, vous serez invité à le saisir à nouveau. Si vous saisissez le mot de passe deux fois, est-il possible de le confirmer? Parce qu'il est dit "y"

Estimated strength of the password: 50 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password: 

Re-enter new password: 
Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Supprimer l'utilisateur anonyme (utilisateur anonyme)? "Y"

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Empêche la connexion de l'utilisateur root distant. Interdire la connexion? "O"

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

Supprimer la base de données nommée test créée par défaut? "O"

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.
 - Removing privileges on test database...
Success.

Recharger immédiatement la table des autorisations pour que les modifications prennent effet? "O"

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done! 

Pour le moment, avez-vous effectué les réglages?

Vérifiez à nouveau l'opération

$mysql -u root -p
Enter password:(saisie du mot de passe)

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.32 Homebrew

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Euh, ça a marché! !! !! Pleurs

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

La base de données de test a également disparu!

Quittez mysql une fois ... Arrête ça ...

$ mysql.server stop
Shutting down MySQL
. SUCCESS! 

Revenir à l'application et installer le bundle

La même erreur ... pleurer

J'ai procédé en référence à l'article suivant! [Rails] Que faire lorsque MySQL2 ne peut pas regrouper l'installation

$ brew info openssl
[email protected]: stable 1.1.1h (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
/usr/local/Cellar/[email protected]/1.1.1g (8,059 files, 18MB)
  Poured from bottle on 2020-05-21 at 18:53:48
/usr/local/Cellar/[email protected]/1.1.1h (8,067 files, 18.5MB)
  Poured from bottle on 2020-11-01 at 12:26:48
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/[email protected]
License: OpenSSL
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /usr/local/etc/[email protected]/certs

and run
  /usr/local/opt/[email protected]/bin/c_rehash

[email protected] is keg-only, which means it was not symlinked into /usr/local,
because macOS provides LibreSSL.

If you need to have [email protected] first in your PATH run:
  echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> /Users/mariko/.bash_profile

For compilers to find [email protected] you may need to set:
  export LDFLAGS="-L/usr/local/opt/[email protected]/lib"
  export CPPFLAGS="-I/usr/local/opt/[email protected]/include"

For pkg-config to find [email protected] you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/[email protected]/lib/pkgconfig"

==> Analytics
install: 835,013 (30 days), 1,906,254 (90 days), 7,237,126 (365 days)
install-on-request: 136,062 (30 days), 257,990 (90 days), 1,007,070 (365 days)
build-error: 0 (30 days)

Cette partie semble être importante.

export LDFLAGS="-L/usr/local/opt/[email protected]/lib"
export CPPFLAGS="-I/usr/local/opt/[email protected]/include"

Exécutez les deux commandes suivantes

$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/[email protected]/include"
You are replacing the current local value of build.mysql2, which is currently nil

$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/[email protected]/lib"
You are replacing the current local value of build.mysql2, which is currently "--with-cppflags=-I/usr/local/opt/[email protected]/include"

Regroupez l'installation J'ai pu l'installer ...! !! !! Pleurs

Sommaire

J'ai dû faire des allers-retours jusqu'à ce que j'introduise MySQL dans mon application. Je suis désolé si c'est difficile à lire. J'espère que vous vous habituerez au pouvoir de quelqu'un, même un peu.

Merci beaucoup aux auteurs pour leur référence.

Il semble y avoir une procédure pour passer à SQLite en cours de route, je vais donc l'essayer avec l'application que j'ai créée jusqu'à présent.

Recommended Posts

[Rails] Développement avec MySQL
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]
Déployez heroku avec Rails6 (Cloud9 + Ubuntu) + MySQL
Construire un environnement Rails 6 + MySQL avec Docker compose
Déployer sur heroku avec Docker (Rails 6, MySQL)
[Docker] Construction de l'environnement de développement Rails6 / Ruby2.7 / MySQL8
Procédure de création d'un environnement de développement d'applications Rails avec Docker [Rails, MySQL, Docker]
[Rails 6] Erreur d'exécution avec $ rails s
Manipuler le dispositif avec des rails
[Rails] Didacticiel Apprendre avec les rails
[Rails] Test avec RSpec
Développement de plug-in avec ImageJ
Erreur lors du déploiement de rails5 + Mysql sur heroku avec Docker-compose
Prend en charge la multilinguisme avec Rails!
Manuel de construction de l'environnement de développement stable pour "Rails6" avec "Docker-compose"
Rails5 + MySQL8.0 + Construction d'environnement de volumes de premier niveau avec docker-compose
À peu près le flux de développement d'applications Web avec Rails.
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Construction de l'environnement de développement Rails6 [Mac]
[Template] Connexion MySQL avec Java
[Rails] Polymorphique express avec graphql-ruby
Rails6 (MySQL, environnement Ubuntu, Cloud9)
[Rails] Télécharger des vidéos avec Rails (ActiveStorage)
[Vue Rails] "Hello Vue!" Affiché avec Vue + Rails
Japaneseize en utilisant i18n avec Rails
Préparation au développement avec Rails
Exécuter des rails à chaque fois dans le docker
Connectez-vous à MySQL 8 avec Java
Utilisez plusieurs bases de données avec Rails 6.0
[Rails] Spécifiez le format avec link_to
[Rails / MySQL] Construction de l'environnement Mac
[Docker] À utiliser à tout moment avec Docker + Rails
J'ai créé un environnement de développement avec rails6 + docker + postgreSQL + Materialise.
[Vagrant] Préparez l'environnement de développement LAMP avec Vagrant (centos + apache + MySQL + PHP)
Créer un portfolio avec rails + postgres sql
[Rails] Transmission push avec LINE Bot
Comparaison du développement d'applications WEB avec Rails et Java Servlet + JSP
[Rails] Rendre la pagination compatible avec Ajax
Déploiement à chaud avec le développement Spring Boot
Création d'un environnement de développement pour Ruby on Rails à l'aide de Docker + VSCode (Remote Container)
Connexion JDBC avec MySQL 8.x * Notes *
Préparer l'environnement de développement Java avec Atom
[Rails 6] Développement d'API à l'aide de GraphQL (Query)