AWS S3 その2

前回はバケット作成とセキュリティ対策だったので今回は実際に投稿するところについて書く。詰まるとしたらこっちの方だろし分けた。

 

S3はローカル環境からでも利用できるのでまずは

1 ローカルから画像投稿する

カリキュラムではsecrets.ymlの時代だったからその書き方になってる。まあ両方知ってる方がいいと思うから両方書くか。

ポイントとしては

昔はbash環境変数書いてたから

vim ~/.bash_profile とかで環境変数のファイル開いてた

今は.zshrcに書いてるので

vim ~/.zshrcとかでファイル開いてこの中に書く

(ちなみにcapistrano使ってるリモートサーバは上の二つの読み込みしてくれないので/etc/environmentsに記述する)

さらにrailsではsecrets.ymlから環境変数読み込む形ではなくて

credentials.ymlに秘密の情報を書くようになったので、結局環境変数

credentials.ymlに書いてある

(それと地味にPC全体の環境変数っていうよりも。あるアプリのcredentials内に書くようになったんだねぇと思った。それぞれにcredentialsあるからアプリごとに分けるような感じになったんかな?)(それとこのcredentialsの暗号化復号化するのがmasterkeyだから絶対にあげない、無くさないようにね。そしてこいつは直接書くんじゃなくて普通環境変数RAILS_MASTER_KEYに入れといてそれを読み込む形とるからね)

 

なので

secrets.ymlの時とはcarrierwaveの設定ファイルの書き方が異なる。

 

config/initializers/carrierwave.rb

require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
  config.storage = :fog
  config.fog_provider = 'fog/aws'
  config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: Rails.application.secrets.aws_access_key_id,
    aws_secret_access_key: Rails.application.secrets.aws_secret_access_key,
    region: 'ap-northeast-1'
  }

  config.fog_directory  = 'ここにバケット名を入れます'
  config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/ここにバケット名を入れます'
end

 

こうじゃなくて

config/initializers/carrierwave.rb(必要なとこだけ)

 

CarrierWave.configure do |config|
config.storage = :fog
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: Rails.application.credentials.aws[:access_key_id],
aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key],
 

こんな感じに書く。rails cでちゃんとその記述で値取れてるか確認するといい感じ

参考記事

https://qiita.com/nakasato_minami/items/0be3dd5efabe812c6282