<DAY98>unicoronを用いた本番環境構築
学習状況
●学習日数 98日
●学習時間(本日)9.5時間
●累計学習時間 431.0時間
●一日あたりの平均学習時間 4.39時間
unicoronの要点まとめ
unicoronって何??
アプリケーション本体を格納して、
動的処理を行うためのサーバー。
railsで使うまでの流れ
gem導入
```
group :production do
gem 'unicorn', '5.4.1'
end
```
bundle install
config/unicorn.rbファイルの設定
手動で上記ディレクトリに作成する。
これはunicornの動きを設定する内容
```
app_path = File.expand_path('../../', __FILE__)
worker_processes 1
working_directory app_path
pid "#{app_path}/tmp/pids/unicorn.pid"
listen "#{app_path}/tmp/sockets/unicorn.sock"
stderr_path "#{app_path}/log/unicorn.stderr.log"
stdout_path "#{app_path}/log/unicorn.stdout.log"
listen 3000
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
```
設定を済ませたコードをgithubにクローンする
以下のコマンドを入力して、ディレクトリを作成
ターミナル(サーバー)
```
~$ sudo mkdir /var/www/
~$ sudo chown ec2-user /var/www/
```
gituhubからコードのURLをコピーして
以下ディレクトリにクローンさせる
```
~$ cd /var/www/
www]$ git clone https://github.com/<レポジトリ名>.git
```
クローンしたディレクトリに移動し、
rbenvでインストールされたRubyが使われているかチェック
```
[ <レポジトリ名>]$ gem install bundler
[<レポジトリ名>]$ bundle install
```
環境変数に設定
データベースのパスワードなど、Githubにアップロードすることができない情報は、環境変数というものを利用して設定
これらの情報は、Railsからは ENV['<環境変数名>'] という変数からアクセスできる
環境変数は /etc/environment というファイルに保存
エディタを立ち上げて
```
sudo vim /etc/environment
```
書き込む内容はこれ
```
DATABASE_PASSWORD='MySQLのrootユーザーのパスワード'
SECRET_KEY_BASE='先程コピーしたsecret_key_base'
```
secret_key_baseを生成
ターミナル(サーバー)
```<レポジトリ名>]$ rake secret
```
環境変数設定後
一度ログアウトしてさらにログインしなおす
```
ssh -i [ダウンロードした鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP]
```
ローカル環境に環境変数読み込みを定義
config/database.yml(ローカル)
```
production:
<<: *default
database: ~~~(-------------)
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
```