[RUBY] [Mémo personnel] Résumé des obstacles lors du déploiement des applications Rails sur AWS

index Comme indiqué dans l'article ci-dessous, j'ai résumé en guise de rappel personnel ce sur quoi je suis tombé lors du déploiement d'une application Rails sur AWS.

(Préparation) Le commentaire AWS le plus poli au monde. Utilisation d'EC2 pour amener l'application Rails sur AWS https://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce https://qiita.com/naoki_mochizuki/items/22cfbf4bf7ec95f6ac1c https://qiita.com/naoki_mochizuki/items/814e0979217b1a25aa3e https://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1

L'instance RDS ne peut pas être créée

Lorsque je configure RDS et clique sur "Créer une base de données", cette erreur se produit.

DB Subnet Group doesn't meet availability zone coverage requirement. Please add subnets to cover at least 2 availability zones. Current coverage: 1 (Service: AmazonRDS; Status Code: 400; Error Code: DBSubnetGroupDoesNotCoverEnoughAZs; Request ID: 3e87202c-e6b3-46dc-8396-47c64a2f0dd6)

J'ai fait référence à cet article. https://www.wantanblog.com/entry/2019/09/24/225020 Apparemment, il semble que le problème était qu'un seul groupe de sous-réseaux a été créé, donc si vous créez un autre sous-réseau avec les paramètres suivants à partir de «VPC» → «Sous-zone» → «Créer un sous-réseau», vous pouvez créer une instance RDS. C'est devenu ainsi. ・ VPC ・ ・ ・ Sélectionnez le VPC créé ・ Zone de disponibilité ・ ・ ・ Spécifiez un emplacement différent du sous-réseau déjà créé ・ Bloc CIDR IPv4 ・ ・ ・ 10.0.1.0/24

Je ne peux pas me connecter à EC2 avec SSH

*[ .ssh ] $: ssh -i mumu.pem [email protected]

Lorsque j'ai essayé de me connecter à EC2 avec, j'ai eu une erreur de connexion après avoir attendu un moment. J'ai fait référence à cet article. https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=3583 Lorsque j'ai vérifié la table de routage du sous-réseau où se trouve EC2, la route vers l'extérieur (destination 0.0.0.0/0, cible igw -...) n'a pas été définie (par inadvertance). Après avoir ajouté les éléments suivants dans "VPC" -> "Table de route" -> "Vérifier la table de route correspondante" -> "Table de route" -> "Modifier la table de route" -> "Ajouter route", la connexion SSH à EC2 devient possible. J'ai fait. ・ Destination ・ ・ ・ 0.0.0.0/0 ・ Cible ・ ・ ・ igw -... (passerelle Internet créée)

Erreur du gem ssh-key introuvable lors de la création de la clé publique

C'était une faute de frappe. C'était ssh-keygen au lieu de ssh-key gem.

Je ne peux pas créer une clé secrète avec un rake secret

L'erreur suivante se produit

$ rake secret
You must use Bundler 2 or greater with this lockfile.

J'ai fait référence à cet article. https://programming-beginner-zeroichi.jp/articles/169

$ gem install bundler
$ bundle install
$ bundle exec rake secret

Je l'ai résolu avec. (* Au fait, puisque l'auteur a défini la base de données de l'application sur sqlite, une erreur s'est produite dans "bundle install", et après avoir suivi les étapes de l'article suivant, j'ai fait "bundle install".

Erreur lors de l'installation de sqlite3 lors de l'installation du bundle

Je prévois d'utiliser MySQL comme base de données, je vais donc changer la base de données de l'application rails de sqlite à MySQL. J'ai fait référence à cet article. https://note.com/itoa06/n/n31fe4f9cd6b9

Cliquez ici pour la différence /Gemfile

-gem 'sqlite3', '~> 1.4'
+gem 'mysql2', '>= 0.4.4'

/config/database.yml

 default: &default
-  adapter: sqlite3
+  adapter: mysql2
+  encoding: utf8mb4
   pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
-  timeout: 5000
+  username: root
+  password:
+  host: localhost
 
 development:
   <<: *default
-  database: db/development.sqlite3
+  database: hello_rails_development

 test:
   <<: *default
-  database: db/test.sqlite3
+  database: hello_rails_test
 
 production:
   <<: *default
-  database: db/production.sqlite3
+  database: hello_rails_production
+  username: hello_rails
+  password: <%= ENV['HELLO_RAILS_DATABASE_PASSWORD'] %>

Failed to start mysqld.service: Unit not found. J'ai eu une erreur lorsque j'ai essayé de lancer MySQL

sudo service mysqld start
Redirecting to /bin/systemctl start mysqld.service
Failed to start mysqld.service: Unit not found.

J'ai fait référence à cet article. https://qiita.com/hamham/items/fd77bb0bb167a150dc8e#mysql57%E3%81%AE%E5%B0%8E%E5%85%A5

Comme @MurakamiKazutaka l'a écrit dans le commentaire, il semble qu'Amazon Linux 2 essaiera d'installer mariaDB en essayant d'installer mysql avec yum.

$ yum -y install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
$ yum -y install mysql mysql-community-server
$ mysqld --version
mysqld  Ver 5.7.23 for Linux on x86_64 (MySQL Community Server (GPL))
$ cd /var/www/rails/nom de l'application
$ sudo service mysqld start

Il a été résolu en toute sécurité.

Je pensais que ce n'était pas sûr. Dans ce cas, MySQL créera lui-même le mot de passe de l'utilisateur root, vous devez donc le mettre dans database.yml, comme l'a dit @hat_log. https://qiita.com/Dough/items/7493ad374a51b24abb58

$ sudo cat /var/log/mysqld.log | grep 'temporary password'
[Note] A temporary password is generated for root@localhost: XXXXXX
$ mysql -u root -p
Enter password: XXXXXX
mysql> set password for root@localhost=password('passwordPASSWORD@999');

Ensuite, entrez le mot de passe dans database.yml

production:
  <<: *default
  database: mumu_production
  username: root
  password: passwordPASSWORD@999

NoMethodError (méthode non définie `deep_symbolize_keys 'pour erreur

Une erreur s'est produite lors de la création de la base de données.

$ rake db:create RAILS_ENV=production
...
NoMethodError (undefined method `deep_symbolize_keys' for...

Je me suis demandé si le fichier .yml était mal formé et ne contenait probablement pas deux espaces de retrait. Ensuite, je n'ai pas écrit le nom de clé secret_key_base: dans config / secrets.yml (par inadvertance).

Mauvais ↓

production:
(Clé secrète générée)

Corriger un ↓

production:
  secret_key_base:(Clé secrète générée)

Le travail pour nginx.service a échoué car le processus de contrôle s'est terminé avec une erreur de code d'erreur

Une erreur se produit lors de la tentative de démarrage de Nginx

$ sudo service nginx start
Redirecting to /bin/systemctl start nginx.service
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

J'ai fait référence à cet article. https://qiita.com/shota0701nemoto/items/a6929ef6f396cf3bede4

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] open() "/var/www/rails/[Nom d'application incorrect]/log/nginx.error.log" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed

Je pense que le contenu de l'erreur varie d'une personne à l'autre. On m'a dit que "/ var / www / rails / [nom d'application incorrect] /log/nginx.error.log" n'existait pas, alors je me suis déplacé vers le fichier et j'ai trouvé

$ cd /var/www/rails/[Nom d'application incorrect]/log
-bash: cd: /var/www/rails/[Nom d'application incorrect]/log: No such file or directory

Quand j'ai regardé de près, j'ai remarqué que j'avais fait une erreur en écrivant le trait d'union (-) et le tiret (_) dans le nom de l'application.

$ vim config/unicorn.conf.rb
$ cd /etc/nginx/conf.d/
$ sudo vim mumu.conf

Correction de la mauvaise partie dans.

$ cd /var/www/rails/[nom de l'application]/
$ sudo service nginx start

Il a démarré en toute sécurité.

Nous sommes désolés, mais une erreur s'est produite. Partie 1

Après avoir démarré Nginx, lorsque j'essaye d'accéder à l'adresse IP EC2 avec Chrome,

We're sorry, but something went wrong.

C'est devenu. Je pensais que c'était parce que j'ai arrêté RDS une fois,

$ sudo service mysqld start

J'ai démarré MySQL, mais il n'y a pas de changement.

$ less log/production.log

Lorsque j'ai vérifié la connexion Rails (le bas est les dernières informations),

ActionView::Template::Error (The asset "application.css" is not present in the asset pipeline.

Puisque l'erreur s'est affichée, réécrivez config / envitonments / production.rb en vous référant à cet article. https://kanoe.studio/archives/791

  # Do not fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = true

Redémarrez le serveur d'applications, (J'ai fait référence à cet article https://qiita.com/takuyanagai0213/items/259ca105e35f6eb066d6 )

$ ps -ef | grep unicorn | grep -v grep
takuya 2460 1 0 11 mars?      00:00:04 unicorn_rails master -c /var/www/rails/myapp/config/unicorn.conf.rb -D -E production
takuya 2465 2460 0 11 mars?      00:00:05 unicorn_rails worker[0] -c /var/www/rails/myapp/config/unicorn.conf.rb -D -E production
takuya 2467 2460 0 11 mars?      00:00:04 unicorn_rails worker[1] -c /var/www/rails/myapp/config/unicorn.conf.rb -D -E production
$ kill 2460
$ unicorn_rails -c /var/www/rails/myapp(Mon nom d'application)/config/unicorn.conf.rb -D -E production

J'ai de nouveau accédé à l'adresse IP EC2, mais comme d'habitude, "Nous sommes désolés, mais une erreur s'est produite." Suite (Est-ce toujours une erreur ...)

Nous sommes désolés, mais une erreur s'est produite. Partie 2

Quand j'ai vérifié à nouveau le journal,

$ less log/production.log

ActionView::Template::Error (Webpacker can't find application in /var/www/rails/hello-rails/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.

Une erreur s'est produite.

Je ne sais pas de quoi tu parles

J'ai fait référence à cet article. https://qiita.com/natecotus/items/a2bd9f3ebd5b1866d48e

$ rm -rf bin/webpack*
$ rails webpacker:install
Webpacker requires Node.js >= 8.16.0 and you are using 6.17.1
Please upgrade Node.js https://nodejs.org/en/download/

Une erreur s'est à nouveau produite. Il semble que la version de Node.js soit ancienne. J'ai fait référence à cet article. https://qiita.com/paranishian/items/bddaed7c3aacedb11967

$ git clone git://github.com/creationix/nvm.git .nvm
$ . ~/.nvm/nvm.sh
$ nvm install
$ curl -o- -L https://yarnpkg.com/install.sh | bash
$ source ~/.bashrc
$ yarn -v

Eh bien, changeons-le ~

$ rails webpacker:install
[Ynaqdhm] Y
[Ynaqdhm] Y
$ RAILS_ENV=production bundle exec rails webpacker:compile

Maintenant qu'il semble compilé, redémarrez Unicorn et Nginx.

$ ps -ef | grep unicorn | grep -v grep
$ kill [ID de processus]
$ unicorn_rails -c /var/www/rails/[nom de l'application]/config/unicorn.conf.rb -D -E production
$ sudo nginx -s reload

Maintenant, essayez de vous connecter avec une adresse IP. .. .. C'était affiché!

Recommended Posts

[Mémo personnel] Résumé des obstacles lors du déploiement des applications Rails sur AWS
Connaissances requises pour intégrer les applications Rails à AWS
[Rails] [Note] Quand ajouter = à <%%> et quand pas
Résumé de la mousse lors de la mise à jour de JMockit 1.4 vers 1.30
Résumé du travail initial lors de la création d'une application avec Rails
Comment déployer l'application Rails sur AWS (résumé de l'article)
Emplacement de la définition de la méthode Résumé de la vérification Lorsque défini dans le projet et Rails / Gem
[Webpacker] Résumé de l'installation de Bootstrap et jQuery dans Rails 6.0