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

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

新規登録して質問してみよう
ただいま回答率
85.46%
unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby on Rails 6

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

1回答

1191閲覧

capistranoでrailsアプリをAWSサーバーに再度デプロイしたい

tomsuma

総合スコア38

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby on Rails 6

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

0クリップ

投稿2020/09/17 13:40

編集2020/09/18 13:14

AWSに更新内容を反映させようと
bundle exec cap production deployコマンドを使い
capistranoでrailsアプリをAWSサーバーに再度デプロイをしたのですが、
このようなエラーが出ました。

Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (2)

Elasticaアドレスを使いいぜんはひらけていたのですが、
we are sorryと出るようになってしまいました。
[ec2-user@ip**** Books]$ rails db:create RAILS_ENV=production
このコマンドでも同じエラーが出ます

docker-compose up 時にでる debconf: delaying package configuration, since apt-utils is not installed

エラーはなにか関係がありますか?

Amazon Linux 2を利用しているので、MariaDBです。

bundle exec cap production deploy 1:in `block (2 levels) in execute' /Users/user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sshkit-1.21.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as ec2-user@54.249.219.192: rake exit status: 1 (SSHKit::Runner::ExecuteError) Caused by: SSHKit::Runner::ExecuteError: Exception while executing as ec2-user@54.249.219.192: rake exit status: 1 rake stdout: Nothing written Caused by: SSHKit::Command::Failed: rake exit status: 1 rake stdout: Nothing written rake stderr: DEPRECATION WARNING: Including LoggerSilence is deprecated and will be removed in Rails 6.1. Please use `ActiveSupport::LoggerSilence` instead (called from block (2 levels) in require at /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/runtime.rb:74) Tasks: TOP => deploy:migrate (See full trace by running task with --trace) The deploy has failed with an error: Exception while executing as ec2-user@54.249.219.192: Exception while executing as ec2-user@54.249.219.192: rake exit status: 1 rake stdout: Nothing written rake stderr: DEPRECATION WARNING: Including LoggerSilence is deprecated and will be removed in Rails 6.1. Please use `ActiveSupport::LoggerSilence` instead (called from block (2 levels) in require at /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/runtime.rb:74) rake aborted! Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (2)

をしたのですが、

database

1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: root 6 password: <%= ENV['DATABASE_PASSWORD'] %> 7 # socket: /tmp/mysql.sock 8 9 host: db 10 11development: 12 <<: *default 13 database: Books_development 14 15test: 16 <<: *default 17 database: Books_test 18 19production: 20 <<: *default 21 database: Books_production 22 23 username: root 24 password: <%= ENV['DATABASE_PASSWORD'] %> 25 socket: /var/lib/mysql/mysql.sock 26

dockercompose

1version: '3' 2services: 3 db: 4 image: mysql:5.6 5 environment: 6 MYSQL_ROOT_PASSWORD: example 7 MYSQL_DATABASE: root 8 ports: 9 - "4306:3306" 10 volumes: 11 - mysql-data:/var/lib/mysql 12 web: 13 build: . 14 environment: 15 DATABASE_PASSWORD: example 16 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 17 volumes: 18 - .:/Books 19 ports: 20 - 3000:3000 21 depends_on: 22 - db 23 tty: true 24 stdin_open: true 25volumes: 26 mysql-data:

deploy

1 2lock '3.14.1' 3 4set :application, 'Books' 5 6set :repo_url, 'git@github.com:shunichfukui/Books.git' 7 8set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads') 9 10set :rbenv_type, :user 11set :rbenv_ruby, '2.6.5' 12set :ssh_options, auth_methods: ['publickey'], 13 keys: ['~/.ssh/35783578a.pem'] 14 15set :unicorn_pid, -> { "#{shared_path}/tmp/pids/unicorn.pid" } 16 17set :unicorn_config_path, -> { "#{current_path}/config/unicorn.rb" } 18set :keep_releases, 5 19 20after 'deploy:publishing', 'deploy:restart' 21namespace :deploy do 22 task :restart do 23 invoke 'unicorn:restart' 24 end 25end

unicon

1app_path = File.expand_path('../../../', __FILE__) 2 3worker_processes 1 4 5working_directory "#{app_path}/current" 6 7listen "#{app_path}/shared/tmp/sockets/unicorn.sock" 8 9pid "#{app_path}/shared/tmp/pids/unicorn.pid" 10 11stderr_path "#{app_path}/shared/log/unicorn.stderr.log" 12 13stdout_path "#{app_path}/shared/log/unicorn.stdout.log" 14 15timeout 60 16 17 18preload_app true 19GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true 20 21check_client_connection false 22 23run_once = true 24 25before_fork do |server, worker| 26 defined?(ActiveRecord::Base) && 27 ActiveRecord::Base.connection.disconnect! 28 29 if run_once 30 run_once = false # prevent from firing again 31 end 32 33 old_pid = "#{server.config[:pid]}.oldbin" 34 if File.exist?(old_pid) && server.pid != old_pid 35 begin 36 sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU 37 Process.kill(sig, File.read(old_pid).to_i) 38 rescue Errno::ENOENT, Errno::ESRCH => e 39 logger.error e 40 end 41 end 42end 43 44after_fork do |_server, _worker| 45 defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection 46end
bundle exec unicorn_rails -c config/unicorn.rb -E production -D bundler: failed to load command: unicorn_rails (/home/ec2-user/.rbenv/versions/2.6.5/bin/unicorn_rails) ArgumentError: config_file=config/unicorn.rb would not be accessible in working_directory=/var/www/current /home/ec2-user/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/unicorn-5.4.1/lib/unicorn/configurator.rb:592:in `working_directory' config/unicorn.rb:7:in `reload'

関係あるかわからないが
docker-compose up -d 済み

production.rbの内容はあっていると思います
server 'アドレスと一致', user: 'ec2-user', roles: %w{app db web}

deploy部分の git@github.com:shunichfukui/Books.git

git@github.com/shunichfukui/Books.git

にしてもだめでした。。

なにか足りない情報などがありましたら
遠慮なくお願いします

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

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

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

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

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

guest

回答1

0

Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (2)

なので、MySQLのコンテナが見つかってないのが原因ですね。

考えられる原因として、unicornを起動する段階でまだdbコンテナが立ち上がっていない可能性があります。
下記あたりが参考になるかもしれません。いずれも何かしらの処理を挟んで起動完了を待つという感じの解決策のようです。

Compose における起動順の制御
docker-composeでAPPコンテナがDBコンテナの起動完了を待ってくれない問題を手軽に解決する
docker-composeでDBの起動完了を待ってからWebアプリを実行する

投稿2020/09/17 17:53

yu_1985

総合スコア7471

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

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

tomsuma

2020/09/17 21:53

ご回答ありがとうございます Docker関係にどこか間違いがあるということでしょうか どの記述が何を指すのかあまりまだわかっておらず、 色々記事を見ても細かくは乗っていなく、 そういう事は本を買って調べるしかないのでしょうか
yu_1985

2020/09/18 06:11

別に間違ってるわけではないと思いますけど、コンテナが立ち上がって使用可能になるまでにはラグがあることがあるのと、それは必ずしもコンテナだけの問題ではなく中で何を動かしているかにもよるのでそこを考慮する必要があるということだと思っています。 depends_onで依存関係を定義することはできますが、起動順序が決まるだけで前に起動させたコンテナのサービスが準備完了するまで待ってくれるわけではないので、そこは自分でなんとかするしかないというところかなと。 断片的に解説したものより公式ドキュメントを読みましょう。古い情報が混じってることが多いので気をつけないと混乱します。 下記は公式ドキュメントを日本語化したものですが、これは最新の情報に追従しきれてないようなので、可能であれば英語の原文ドキュメントを見ることをお勧めします。 https://docs.docker.jp/compose/networking.html
tomsuma

2020/09/18 08:15

初歩の質問に戻らせてもらい大変恐縮なのですが、DockerとAWSを結びつけるような事は何もしておらず、AWSでElasticID取得後、Dockerを入れたのました。 Dockerを入れ始めたところMysql2::Error:が出始めるようになったので関係あるかなと主持ったのですが、もしかして関係ないのでしょうか?
yu_1985

2020/09/18 08:28

> host: db confのここの部分でdocker-composeで立ち上げたdbコンテナを明示的に指定しているんですが…。 本当に何もしてないんですか?誰か他の人がこの設定をやったということですか? また、その言い方だとそれ以前はちゃんとデプロイできていたんでしょうか。 そうだとすると、その頃はどのようにデプロイしていたんですか? 考えられるとすれば、何らかの方法で「db」をどこかのデータベースとして名前解決していたということですが…。
tomsuma

2020/09/18 08:36

>誰か他の人がこの設定をやったということですか? Qiitaの記事を見てなんとなくでできてしまいました。。 >また、その言い方だとそれ以前はちゃんとデプロイできていたんでしょうか。 以前はElastic IPで開けていました。 >その頃はどのようにデプロイしていたんですか? bundle exec cap production deploy コマンドでデプロイしていました であっているでしょうか? >何らかの方法で「db」をどこかのデータベースとして名前解決していたということですが…。 Dockerを加えてから初めて bundle exec cap production deploy コマンドを打ちました
tomsuma

2020/09/18 08:46

docker-compose down --rmi all --volumes でDocker関係を一度消してもやはり同じエラーが出ます
yu_1985

2020/09/18 09:18 編集

> 以前はElastic IPで開けていました。 今でもそれは変わらないはずです。 問題はDockerで環境構築する以前にデプロイしていて、それはうまく行ってましたか、ということです。 > bundle exec cap production deploy capistranoを使っていた事実ではなく、capistranoに何をさせていたかを確認したかったです。 > Dockerを加えてから初めて > bundle exec cap production deploy >コマンドを打ちました これは、Dockerで環境構築する以前にはデプロイを行っていなかったということですか? 「再度」と書いてありますが…。 > docker-compose down --rmi all --volumes でDocker関係を一度消してもやはり同じエラーが出ます 書いた通りの原因だったらそれをやったところで意味はないです。 回答のURLを参考に対処してみてください。それでうまく行かなかったら別の原因ということです。 そもそもなぜDockerを使ったんでしょうか? Railsを動かすことだけが目的だったら一旦もとに戻すのもアリだと思います。
tomsuma

2020/09/18 13:19 編集

ご回答ありがとうございます こちらの説明不足で申し訳ございません >今でもそれは変わらないはずです。 問題はDockerで環境構築する以前にデプロイしていて、それはうまく行ってましたか、ということです。 Dockerを加えて再度デプロイしたいです。 >capistranoに何をさせていたかを確認したかったです。 自動デプロイを実行しておりました >そもそもなぜDockerを使ったんでしょうか? Railsを動かすことだけが目的だったら一旦もとに戻すのもアリだと思います 一度戻そうとしてdocker-compose down --rmi all --volumesコマンドを打ったつもりでした。 そしてrails sでも Unknown MySQL server host 'db' (0) のエラーが出ます docker-compose up すると ActiveRecord::NoDatabaseError Unknown database 'Books_development' エラーが出ます。。。
yu_1985

2020/09/18 16:10

'db'を参照しようとしてるのだから、コンテナを立ち上げてない状態で接続出来ないのは当然です。 docker-compose up で「そんなデータベース知らないです」と言われたのなら、dbに接続はできてるけどデータベースが見つからない状態なのでちゃんとデータベースを作成してください。
tomsuma

2020/09/18 22:27 編集

大変失礼しました。 こちらの事情で大変申し訳無いのですが、只今就活中で少し焦ってしまいました ありがとうございます とりあえず本読みます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問