S3を使ってアップロード⑥
本番環境からS3にアップロード
本番環境の環境変数を設定
環境変数の設定ファイルを変更
# 本番環境 ターミナル $ ssh -i [pem鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP] (ダウンロードした鍵を用いて、ec2-userとしてログイン) $ sudo vim /etc/environment # iを押してインサートモードに移行し、下記を追記する。既存の記述は消去しない。 AWS_ACCESS_KEY_ID='ここにCSVファイルのAccess key IDの値をコピー' AWS_SECRET_ACCESS_KEY='ここにCSVファイルのにSecret access keyの値をコピー' # 編集が終わったらescapeキーを押してから:wqと入力して保存して終了
環境変数の設定を反映
ターミナル
# 本番環境 # 編集した環境変数を適用するために一旦ログアウトします。 $ exit $ ssh -i [pem鍵の名前].pem ec2-user@[作成したEC2インスタンスと紐付けたElastic IP] # 環境変数が適用されているか確認しましょう。 $ env | grep AWS_SECRET_ACCESS_KEY $ env | grep AWS_ACCESS_KEY_ID
デプロイにCapistranoを利用しているため、environmentというファイルに書き込んで環境変数の設定を行いました。
本番環境での環境変数読み込みの設定
config/secrets.yml
# Be sure to restart your server when you modify this file. # Your secret key is used for verifying the integrity of signed cookies. # If you change this key, all old signed cookies will become invalid! # Make sure the secret is at least 30 characters and all random, # no regular words or you'll be exposed to dictionary attacks. # You can use `rails secret` to generate a secure secret key. # Make sure the secrets in this file are kept private # if you're sharing your code publicly. development: secret_key_base: cb2965bfebd75267542611a74ab612b9754f98・・・・・ aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> test: secret_key_base: 7362cb8e960adf75f110e17bb4cd1f2d4edc3d・・・・・ # Do not keep production secrets in the repository, # instead read values from the environment. production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
このままではCapstranoで自動デプロイを行っても本番環境には送られないので、Capistranoの設定を変更します。 config/deploy.rb
# secrets.yml用のシンボリックリンクを追加 set :linked_files, %w{ config/secrets.yml } # 元々記述されていた after 「'deploy:publishing', 'deploy:restart'」以下を削除して、次のように書き換え after 'deploy:publishing', 'deploy:restart' namespace :deploy do task :restart do invoke 'unicorn:restart' end desc 'upload secrets.yml' task :upload do on roles(:app) do |host| if test "[ ! -d #{shared_path}/config ]" execute "mkdir -p #{shared_path}/config" end upload!('config/secrets.yml', "#{shared_path}/config/secrets.yml") end end before :starting, 'deploy:upload' after :finishing, 'deploy:cleanup' end
変更内容をデプロイ
GitHubにアップロードします。コミットしてGithubにプッシュ(publish)します。
自動デプロイを実行
ターミナル(ローカル)
$ bundle exec cap production deploy