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
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
*[ .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)
C'était une faute de frappe. C'était ssh-keygen au lieu de ssh-key gem.
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".
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
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)
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é.
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 ...)
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