【Rails】 Carrierwave와 fog-aws를 사용하여 이미지를 AWS S3에 업로드하는 방법

목표





개발 환경



· Ruby : 2.5.7
·Rails: 5.2.4
·Vagrant: 2.2.7
· VirtualBox : 6.1
· OS : macOS Catalina

전제



AWS 계정을 등록했습니다.

하기 실장 완료.

· 게시 기능 구현
· Carrierwave를 이용한 이미지 게시 기능 구현

AWS 설정



1. 아래 링크에 액세스



AWS Management Console

2. 서비스를 클릭합니다.





3. IAM을 클릭합니다.





4. 사용자를 클릭합니다.





5. 사용자 추가를 클릭합니다.





6. 사용자 상세 설정



①유저명을 기입한다. (적당하고 좋음)

②액세스의 종류를 プログラムによるアクセス 로 설정한다.

次のステップ:アクセス制限 를 클릭


7. 기존 정책에 직접 연결을 클릭합니다.





8. AmazonS3FullAccess를 선택하고 다음 단계: 태그를 클릭합니다.





9. 다음 단계: 확인을 클릭합니다.





10. 사용자 만들기를 클릭합니다.





11. 액세스 키 ID 및 비밀 액세스 키를 복사하여 삼가고 서비스를 클릭합니다.





12. S3 클릭





13. 버킷 만들기를 클릭합니다.





14. 이름과 지역 설정



① 버킷 이름을 입력합니다. (적당하고 좋음)

② 지역을 アジアパシフィック(東京)로 설정한다.

次へ 를 클릭한다.



14. 다음을 클릭합니다.





15. 다음을 클릭합니다.





16. 버킷 만들기를 클릭합니다.





구현



1. 키를 환경 변수화



① "gem 'dotenv-rails'"도입

Gemfile
gem 'dotenv-rails'

터미널
& bundle

② 어플리케이션 바로 아래에 '.env' 파일을 작성
※어플리케이션의 디렉토리로 이동하고 나서 이하의 커멘드를 실행

터미널
$ touch .env 



.env 파일 편집

.env
S3_ACCESS_KEY_ID = 'アクセスキー' # 追記
S3_SECRET_ACCESS_KEY = 'シークレットアクセスキー' # 追記

.gitignore 파일 편집

.gitignore
/.env # 追記

2.Gem 도입



Gemfile
gem 'fog-aws'

터미널
$ bundle

3. image_uploader.rb 편집



7행의 storage :file를 코멘트 아웃 해, 아래의 코드를 추기한다.

image_uploader.rb
# 追記
if Rails.env.development? # 開発環境の場合
  storage :file
elsif Rails.env.test? # テスト環境の場合
  storage :file
else # 本番環境の場合
  storage :fog
end
storage :file➡︎ 이미지를 응용 프로그램에 업로드합니다.
storage :fog➡︎ 이미지를 S3에 업로드합니다.

4. carrierwave.rb 작성 및 편집



터미널
$ touch config/initializers/carrierwave.rb

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

CarrierWave.configure do |config|
  if Rails.env.production? # 本番環境の場合はS3へアップロード
    config.storage :fog
    config.fog_provider = 'fog/aws'
    config.fog_directory  = 'matsubishi-sample' # バケット名
    config.fog_public = false
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: ENV['S3_ACCESS_KEY_ID'], # アクセスキー
      aws_secret_access_key: ENV['S3_SECRET_ACCESS_KEY'], # シークレットアクセスキー
      region: 'ap-northeast-1', # リージョン
      path_style: true
    }
  else # 本番環境以外の場合はアプリケーション内にアップロード
    config.storage :file
    config.enable_processing = false if Rails.env.test?
  end
end

좋은 웹페이지 즐겨찾기