解決したいこと:EC2サーバでRailsを起動したいです。
AWSでデプロイをします。
※ EC2インスタンス内で、MySQL、Rails、Unicornを使用します。
デプロイの経験が乏しく、解けない状況が続いており相談させてください。
発生している問題点と仮説
// ユニコーンを実行しようとしたところエラーになりました。 [ec2-user@ip アプリ名]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D => master failed to start, check stderr log for details // エラーメッセージに「check stderr log」とあるので、エラー詳細確認したところMySQL serverのエラーとのことです。 [ec2-user@ip アプリ名]$ less log/unicorn.stderr.log => E, [2020-07] ERROR -- : Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error::ConnectionError)
試したこと
【試行1:SQLのパスの修正】 // 開発環境と本番環境のSQLの設定を同一にするため、socket周りを修正、githubへマージの後pullをしました。 #config/database.yml production: <<: *default database: アプリ名_production username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock //ソケットの読み込み先パスが同一か確認。設定されています。 $ mysql_config --socket => /var/lib/mysql/mysql.sock // keyとpwが正しく入っているか確認しました。 => SECRET_KEY_BASE=xxx => DATABASE_PASSWORD=xxx // データベースを作成しマイグレーションを行いました。 [ec2-user@ip アプリ名]$ rails db:create RAILS_ENV=production [ec2-user@ip アプリ名]$ rails db:migrate RAILS_ENV=production // 再び、ユニコーンの起動を試みます。 [ec2-user@ip アプリ名]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D => (反応なく次の行に遷移) // 通過したので「http://elasticIP:3000」でアクセスするとビュー上でエラーになります。 => We're sorry, but something went wrong. // F12検証ツール Failed to load resource: the server responded with a status of 500 (Internal Server Error) // 再度エラーでひっかかっていた箇所を確認すると、同様のエラーのままでした。 [ec2-user@ip アプリ名]$ less log/unicorn.stderr.log => E, [2020-07-14 ] ERROR -- : Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error::ConnectionError) 【試行2:各種確認】 // MySQLとUnicornの状態確認(PIDは取得できている様子です) $ ps ax | grep mysql root 2850 0.0 0.2 11788 2824 pts/0 S 22:49 0:00 /bin/sh /usr/libexec/mysql56/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql mysql 3064 0.0 46.0 1328608 464484 pts/0 Sl 22:49 0:01 /usr/libexec/mysql56/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql56/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock ec2-user 3622 0.0 0.2 110536 2220 pts/0 S+ 23:39 0:00 grep --color=auto mysql $ ps aux | grep unicorn ec2-user 3454 0.1 11.9 515308 121084 ? Sl 23:12 0:02 unicorn_rails master -c config/unicorn.rb -E production -D ec2-user 3475 0.0 11.0 515308 111628 ? Sl 23:17 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D ec2-user 3604 0.0 0.2 110536 2192 pts/0 S+ 23:34 0:00 grep --color=auto unicorn //MySQL起動確認 [ec2-user@ip ~]$ sudo service mysqld status => mysqld (pid 15692) is running... //MySQL接続確認 [ec2-user@ip ~]$ mysql -u root -p => Welcome to the MySQL monitor. // gemの版数でエラーになるとの記事から5.4.1にしています。 => gem "unicorn", "5.4.1" // ローカル環境でrails sによりPUMA確認 => エラーなく動きます。 【試行3】 // AWSのEC2インスタンスの再起動 そもそもインスタンスを再起動しないと動かない事があるとの記事から 念のため行いましたが、同じエラーが出る状況です。
関連するソースコード
#unicorn.rb app_path = File.expand_path('../../', __FILE__) worker_processes 1 working_directory app_path pid "#{app_path}/tmp/pids/unicorn.pid" listen 3000 stderr_path "#{app_path}/log/unicorn.stderr.log" stdout_path "#{app_path}/log/unicorn.stdout.log" timeout 60 preload_app true GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true check_client_connection false run_once = true before_fork do |server, worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect! if run_once run_once = false end old_pid = "#{server.config[:pid]}.oldbin" if File.exist?(old_pid) && server.pid != old_pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH => e logger.error e end end end after_fork do |_server, _worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection end #database.yml default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: socket: /tmp/mysql.sock development: <<: *default database: アプリ名_development test: <<: *default database: アプリ名_test production: <<: *default database: アプリ名_production username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock
色々な記事を参考に試行しましたがエラー状況が変わらず、
修正できないでいます。
情報不足や疑問点などありましたらご指摘ください。
何卒よろしくお願いいたします。
補足事項
Ruby(2.5.1)
Rails(5.2.4.3)
MySQL(5.6.47)
Unicorn(5.4.1)
回答3件
あなたの回答
tips
プレビュー