[RUBY] [Persönliches Memo] Zusammenfassung der Stolpersteine beim Bereitstellen von Rails-Apps für AWS

index Wie im folgenden Artikel gezeigt, habe ich als persönliche Erinnerung zusammengefasst, worauf ich beim Bereitstellen einer Rails-App für AWS gestoßen bin.

(Vorbereitung) Der höflichste AWS-Kommentar der Welt. Verwenden von EC2, um die Rails-App zu AWS zu bringen 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

Eine RDS-Instanz kann nicht erstellt werden

Wenn ich RDS einstelle und auf "Datenbank erstellen" klicke, tritt dieser Fehler auf.

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)

Ich habe auf diesen Artikel verwiesen. https://www.wantanblog.com/entry/2019/09/24/225020 Anscheinend bestand das Problem darin, dass nur eine Subnetzgruppe erstellt wurde. Wenn Sie also ein anderes Subnetz mit den folgenden Einstellungen unter "VPC" → "Subzone" → "Subnetz erstellen" erstellen, können Sie eine RDS-Instanz erstellen. Es wurde so. ・ VPC ・ ・ ・ Wählen Sie die erstellte VPC aus ・ Verfügbarkeitszone ・ ・ ・ Geben Sie einen anderen Speicherort als das bereits erstellte Subnetz an ・ IPv4-CIDR-Block ・ 0. 0. 10.0.1.0/24

Ich kann mich mit SSH nicht bei EC2 anmelden

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

Als ich versuchte, mich bei EC2 anzumelden, wurde nach einer Weile Wartezeit ein Verbindungsfehler angezeigt. Ich habe auf diesen Artikel verwiesen. https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=3583 Als ich die Routentabelle des Subnetzes überprüfte, in dem sich EC2 befindet, wurde die Route nach außen (Ziel 0.0.0.0/0, Ziel igw -...) nicht (versehentlich) festgelegt. Nach dem Hinzufügen von Folgendem in "VPC" -> "Routentabelle" -> "Überprüfen der entsprechenden Routentabelle" -> "Routentabelle" -> "Routentabelle bearbeiten" -> "Route hinzufügen" wird eine SSH-Verbindung zu EC2 möglich. Ich tat. ・ Ziel ・ ・ 0. 0.0.0.0/0 ・ Ziel ・ ・ ig igw -... (erstelltes Internet-Gateway)

Fehler des ssh-key gem beim Erstellen des öffentlichen Schlüssels nicht gefunden

Es war ein Tippfehler. Es war ssh-keygen anstelle von ssh-key gem.

Ich kann keinen geheimen Schlüssel mit Rake Secret machen

Der folgende Fehler tritt auf

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

Ich habe auf diesen Artikel verwiesen. https://programming-beginner-zeroichi.jp/articles/169

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

Ich habe es mit gelöst. (* Da der Autor die Datenbank der Anwendung auf SQLite gesetzt hat, ist übrigens ein Fehler bei der "Bundle-Installation" aufgetreten. Nachdem ich die Schritte im nächsten Artikel ausgeführt habe, habe ich die "Bundle-Installation" durchgeführt.

Fehler bei der Installation von sqlite3 bei der Bundle-Installation

Ich habe vor, MySQL als Datenbank zu verwenden, daher werde ich die Rails-App-Datenbank von SQLite auf MySQL ändern. Ich habe auf diesen Artikel verwiesen. https://note.com/itoa06/n/n31fe4f9cd6b9

Klicken Sie hier für den Unterschied /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. Beim Versuch, MySQL zu starten, ist ein Fehler aufgetreten

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

Ich habe auf diesen Artikel verwiesen. https://qiita.com/hamham/items/fd77bb0bb167a150dc8e#mysql57%E3%81%AE%E5%B0%8E%E5%85%A5

Wie @MurakamiKazutaka in dem Kommentar schrieb, scheint es, dass Amazon Linux 2 versuchen wird, mariaDB zu installieren, wenn versucht wird, mysql mit yum zu installieren.

$ 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/App Name
$ sudo service mysqld start

Es wurde sicher gelöst.

Ich dachte, es wäre nicht sicher. In diesem Fall erstellt MySQL das Kennwort des Root-Benutzers selbst, sodass Sie das Kennwort in database.yml einfügen müssen, wie @hat_log sagte. 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');

Geben Sie als Nächstes das Kennwort in database.yml ein

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

NoMethodError (undefinierte Methode `deep_symbolize_keys 'für Fehler

Beim Erstellen der Datenbank ist ein Fehler aufgetreten.

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

Ich fragte mich, ob die .yml-Datei fehlerhaft war und wahrscheinlich keine zwei Einrückungsbereiche hatte. Dann habe ich den Schlüsselnamen secret_key_base nicht geschrieben: in config / Secrets.yml (versehentlich).

Falsch ↓

production:
(Generierter geheimer Schlüssel)

Korrigieren Sie eine ↓

production:
  secret_key_base:(Generierter geheimer Schlüssel)

Der Job für nginx.service ist fehlgeschlagen, da der Steuerungsprozess mit einem Fehlercodefehler beendet wurde

Beim Versuch, Nginx zu starten, tritt ein Fehler auf

$ 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.

Ich habe auf diesen Artikel verwiesen. 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/[Falscher App-Name]/log/nginx.error.log" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed

Ich denke, der Inhalt des Fehlers variiert von Person zu Person. Mir wurde gesagt, dass "/ var / www / rails / [falscher App-Name] /log/nginx.error.log" nicht existiert, also bin ich in die Datei gegangen und habe sie gefunden

$ cd /var/www/rails/[Falscher App-Name]/log
-bash: cd: /var/www/rails/[Falscher App-Name]/log: No such file or directory

Als ich genau hinschaute, bemerkte ich, dass ich beim Schreiben des Bindestrichs (-) und der Unterleiste (_) im App-Namen einen Fehler gemacht hatte.

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

Der falsche Teil in wurde korrigiert.

$ cd /var/www/rails/[App Name]/
$ sudo service nginx start

Es begann sicher.

Es tut uns leid, aber etwas ist schief gelaufen. Teil 1

Wenn ich nach dem Start von Nginx versuche, mit Chrome auf die EC2-IP-Adresse zuzugreifen,

We're sorry, but something went wrong.

Es wurde. Ich dachte, das lag daran, dass ich RDS einmal gestoppt habe.

$ sudo service mysqld start

Ich habe MySQL gestartet, aber es gibt keine Änderung.

$ less log/production.log

Als ich das Rails-Login überprüft habe (unten sind die neuesten Informationen),

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

Da der Fehler angezeigt wurde, schreiben Sie config / envitonments / Production.rb unter Bezugnahme auf diesen Artikel neu. https://kanoe.studio/archives/791

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

Starten Sie den Anwendungsserver neu. (Ich habe auf diesen Artikel verwiesen https://qiita.com/takuyanagai0213/items/259ca105e35f6eb066d6 )

$ ps -ef | grep unicorn | grep -v grep
takuya 2460 1 0 11. März?      00:00:04 unicorn_rails master -c /var/www/rails/myapp/config/unicorn.conf.rb -D -E production
takuya 2465 2460 0 11. März?      00:00:05 unicorn_rails worker[0] -c /var/www/rails/myapp/config/unicorn.conf.rb -D -E production
takuya 2467 2460 0 11. März?      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(Mein App-Name)/config/unicorn.conf.rb -D -E production

Ich habe erneut auf die EC2-IP-Adresse zugegriffen, aber wie üblich: "Es tut uns leid, aber etwas ist schiefgegangen." Fortsetzung (Ist es immer noch ein Fehler ...)

Es tut uns leid, aber etwas ist schief gelaufen. Teil 2

Als ich das Protokoll erneut überprüfte,

$ 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.

Es ist ein Fehler aufgetreten.

Ich weiß nicht, wovon du sprichst

Ich habe auf diesen Artikel verwiesen. 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/

Es ist erneut ein Fehler aufgetreten. Es scheint, dass die Version von Node.js alt ist. Ich habe auf diesen Artikel verwiesen. 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

Na dann, lass es uns ändern ~

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

Nachdem es so aussieht, als wäre es kompiliert, starten Sie Unicorn und Nginx neu.

$ ps -ef | grep unicorn | grep -v grep
$ kill [Prozess ID]
$ unicorn_rails -c /var/www/rails/[App Name]/config/unicorn.conf.rb -D -E production
$ sudo nginx -s reload

Versuchen Sie nun, eine Verbindung mit einer IP-Adresse herzustellen. .. .. Es wurde angezeigt!

Recommended Posts

[Persönliches Memo] Zusammenfassung der Stolpersteine beim Bereitstellen von Rails-Apps für AWS
Erforderliche Kenntnisse, um Rails-Apps zu AWS zu bringen
[Rails] [Hinweis] Wann = zu <%%> hinzugefügt werden soll und wann nicht
Zusammenfassung des Mooses beim Update von JMockit 1.4 auf 1.30
Zusammenfassung der ersten Arbeiten beim Erstellen einer App mit Rails
So stellen Sie die Rails-Anwendung in AWS bereit (Artikelzusammenfassung)
Speicherort der Methodendefinition Zusammenfassung der zu überprüfenden Informationen Wenn im Projekt und in Rails / Gem definiert
[Webpacker] Zusammenfassung der Installation von Bootstrap und jQuery in Rails 6.0