master failed to start, check stderr log for details
[ec2 リポジトリ 名]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
をすると
master failed to start, check stderr log for details
がでる。
そこから
less log/unicorn.stderr.log
で調べるとエラーを発見
発生している問題・エラーメッセージ
[ec2 リポジトリ 名]$ less log/unicorn.stderr.log I, [2021-02-02T12:28:15.675241 #18872] INFO -- : Refreshing Gem list bundler: failed to load command: unicorn_rails (/home/ec2-user/.rbenv/versions/2.6.5/bin/unicorn_rails) NoMethodError: Cannot load `Rails.config.active_storage.service`: undefined method `fetch' for nil:NilClass
試したこと
S3でバケットの作成
↓
バケットポリシーの設定
↓
"aws-sdk-s3"をGemfileに追記
Gemfile
1gem "aws-sdk-s3", require: false
↓
% bundle install
↓
development.rbを編集
config/environments/development.rb
# ~省略~ config.active_storage.service = :amazon # ~省略~
↓
storage.ymlにバケット名とリージョン名を記述
config/storage.yml
amazon: service: S3 region: ap-northeast-1 bucket: バケット名
↓
環境変数を設定するファイルを開く
% vim ~/.zshrc
↓
環境変数にアクセスキーを代入
export AWS_ACCESS_KEY_ID="CSVファイルのAccess key ID" export AWS_SECRET_ACCESS_KEY="CSVファイルのSecret access key"
↓
保存
↓
環境変数の設定ファイルを読み込み直し、追加した環境変数を使えるようにする
↓
% source ~/.zshrc
↓
storage.ymlを編集
config/storage.yml
amazon: service: S3 region: ap-northeast-1 bucket: バケット名が記載されている状態 access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %> secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
↓
git-secretsをインストール
% cd ~/ % brew install git-secrets
↓
% cd アプリケーション名 #開発中のアプリに移動 % git secrets --install
↓
git-secretsの条件を設定
% git secrets --register-aws --global % git secrets --list
↓
GitHub Desktopからgit-secretsを利用できるようにする
% sudo cp /usr/local/bin/git-secrets /Applications/GitHub\ Desktop.app/Contents/Resources/app/git/bin/git-secrets
↓
今後作成する全てのリポジトリに、git-secretsが適用されるように
% git secrets --install ~/.git-templates/git-secrets % git config --global init.templatedir '~/.git-templates/git-secrets'
↓
production.rbを編集
production.rbに記述している画像の保存先の設定を「:local」→「:amazon」に変更
config/environments/production.rb
# ~省略~ config.active_storage.service = :amazon # ~省略~
↓
EC2インスタンスを作成
↓
Amazon Linux 2 AMI を選択
↓
キーペア名を決めて、ダウンロード
↓
Elastic IPの作成
↓
Elastic IPの紐付けをする
↓
インバウンドのルールの編集
|タイプ|プロトコル|ポート範囲|送信元|
|:--|:--:|--:|
|HTTP|TCP|80|カスタム/0.0.0.0/0|
|HTTP|TCP|80|カスタム::/0|
を追加
↓
EC2インスタンスへログイン
% cd ~
% mkdir ~/.ssh
% mv Downloads/ダウンロードした鍵の名前.pem .ssh/
% cd .ssh/
% ls # pemファイルが存在するか確認
% chmod 600 ダウンロードした鍵の名前.pem
% ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP
↓
「yes」と入力し、実行
↓
パッケージをアップデート
[ec2 ~]$ sudo yum -y update
[ec2 ~]$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl
↓
EC2にNode.jsをインストール
[ec2 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash - [ec2 ~]$ sudo yum -y install nodejs
↓
EC2にYarnのインストール
[ec2 ~]$ sudo yum -y install wget [ec2 ~]$ sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo [ec2 ~]$ sudo yum -y install yarn
↓
EC2にrbenvとruby-buildをインストール
# ①rbenvのインストール [ec2 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv # ②パスを通す [ec2 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile # ③rbenvを呼び出すための記述 [ec2 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile # ④.bash_profileの読み込み [ec2 ~]$ source .bash_profile # ⑤ruby-buildのインストール [ec2 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build # ⑥rehashを行う [ec2 ~]$ rbenv rehash
↓
EC2にRubyをインストール
# Ruby 2.6.5のバージョンをインストール [ec2 ~]$ rbenv install 2.6.5 # EC2インスタンス内で使用するRubyのバージョンを決める [ec2 ~]$ rbenv global 2.6.5 # rehashを行う [ec2 ~]$ rbenv rehash # Rubyのバージョンを確認 [ec2 ~]$ ruby -v
↓
MariaDBをインストール
[ec2 ~]$ sudo yum -y install mysql56-server mysql56-devel mysql56 mariadb-server mysql-devel
↓
データベースを起動
[ec2 ~]$ sudo systemctl start mariadb
[ec2 ~]$ sudo systemctl status mariadb
↓
データベースのrootパスワードの設定
[ec2 ~]$ sudo /usr/bin/mysql_secure_installation
↓
データベースへの接続を確認
[ec2 ~]$ mysql -u root -p
確認できれば「exit」で抜ける
↓
EC2サーバーのssh鍵のペアを作成し、GitHubにssh鍵を登録
[ec2 ~]$ ssh-keygen -t rsa -b 4096
↓
ssh公開鍵の値を確認し、GitHubに登録
[ec2 ~]$ cat ~/.ssh/id_rsa.pub
「ssh-rsa」から「末尾の文字」までコピー
↓
SSH鍵登録に公開鍵を保存
↓
確認
[ec2 ~]$ ssh -T git@github.com
↓
Unicornをインストール
Gemfile
1group :production do 2 gem 'unicorn', '5.4.1' 3end
% bundle install
↓
「unicorn.rb」を作成し、以下のように編集
config/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 # prevent from firing again 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
↓
編集内容をリモートリポジトリに反映する
↓
EC2にローカルの全内容を反映する
#mkdirコマンドで新たにディレクトリを作成 [ec2 ~]$ sudo mkdir /var/www/ #作成したwwwディレクトリの権限をec2-userに変更 [ec2 ~]$ sudo chown ec2-user /var/www/
「リポジトリURL」を取得(URLをコピー)
[ec2 ~]$ cd /var/www/ [ec2 www]$ git clone コピーしたURLを貼り付ける
↓
Swapファイルの領域を広げる
[ec2 ~]$ cd
[ec2 ~]$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
[ec2 ~]$ sudo chmod 600 /swapfile1
[ec2 ~]$ sudo mkswap /swapfile1
[ec2 ~]$ sudo swapon /swapfile1
[ec2 ~]$ sudo sh -c 'echo "/swapfile1 none swap sw 0 0" >> /etc/fstab'
↓
gemをインストール
[ec2 www]$ cd /var/www/開発中のアプリケーション # rubyのバージョンを確認 [ec2 <リポジトリ名>]$ ruby -v
↓
secret_key_baseを作成
[ec2 <リポジトリ名>]$ rake secret
↓
環境変数を設定
[ec2 ~]$ sudo vim /etc/environment
DATABASE_PASSWORD='データベースのrootユーザーのパスワード' SECRET_KEY_BASE='secret_key_base' AWS_ACCESS_KEY_ID='CSVファイルのAccess key IDの値' AWS_SECRET_ACCESS_KEY='CSVファイルのSecret access key'
入力後、保存
↓
環境変数を反映
[ec2 ~]$ exit
$ ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP
↓
確認
[ec2 ~]$ env | grep SECRET_KEY_BASE SECRET_KEY_BASE='secret_key_base' [ec2 ~]$ env | grep DATABASE_PASSWORD DATABASE_PASSWORD='データベースのrootユーザーのパスワード' [ec2 ~]$ env | grep AWS_SECRET_ACCESS_KEY AWS_SECRET_ACCESS_KEY='Secret access key' [ec2 ~]$ env | grep AWS_ACCESS_KEY_ID AWS_ACCESS_KEY_ID='Access key ID'
↓
セキュリティグループのポートを設定
タイプ | プロトコル | ポート範囲 | 送信元 |
---|---|---|---|
カスタムTCP | TCP | 3000 | カスタム/0.0.0.0/0 |
を追加
↓
本番環境でRailsを起動
production: <<: *default database:編集しない username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock
[ec2 <リポジトリ名>] git pull origin master
[ec2 <リポジトリ名>]$ rails db:create RAILS_ENV=production Created database 'データベース名' [ec2 <リポジトリ名>]$ rails db:migrate RAILS_ENV=production
[ec2 ~]$ cd /var/www/リポジトリ [ec2 <リポジトリ名>]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
↓
エラー
master failed to start, check stderr log for details
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。