carrierwave를 사용하여 aws의 s3에 이미지를 업로드 할 수 있도록하고 이미지를 업로드하지 않을 때 기본 이미지를 표시하는 방법
9264 단어 awsS3루비Railscarrierwave
소개
carrierwave에서 이미지 업로드 기능을 구현한 후 업로드된 이미지를 AWS S3에 저장할 수 있도록 하는 방법을 설명합니다.
덧붙여 carrierwave를 도입하고 있는 것을 전제로 해설하고 있습니다.
carrierwave 의 구현이 아직의 분은 이 기사 를 참고로 해 보세요.
AWS IAM 사용자 및 S3 버킷 생성
IAM 사용자 만들기
IAM 사용자 만들기
이것으로 IAM 사용자 설정이 완료됩니다.
S3 버킷 만들기
버킷 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt000001",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ARNをここに貼り付ける"
},
"Action": "s3*",
"Resource": "arn:aws:s3:::バケット名"
}
]
}
이것으로 AWS 설정이 완료됩니다.
uploader 클래스 설정
작성한 uploader 클래스의 설정(나의 경우는 ImageUploader 클래스)을 아래와 같이 추기합니다.
개발 환경, 테스트 환경에서는 「strage: file」, 프로덕션 환경에서는 「strage: fog」를 지정하는 것으로, 프로덕션 환경만 이미지가 S3에 업로드되도록 하고 있습니다.
app/uploaders/image_uploader.rbclass ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
include CarrierWave::MiniMagick
# only pg,jpeg,gif,png
def extension_white_list
%w(jpg jpeg gif png)
end
if Rails.env.development?
storage :file
elsif Rails.env.test?
storage :file
else
storage :fog
end
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
#注) if original_filename.present?を記載しないと、画像をアップロードしていない場合でもファイル名を作成してしまい、実在しない画像を参照してしまいます。
def filename
if original_filename.present?
time = Time.now
name = time.strftime('%Y%m%d%H%M%S') + '.jpg'
name.downcase
end
end
그런 다음 config/initializers/아래에 carrierwave.rb 파일을 만들고 아래 코드를 추가합니다.
config/initializers/carrierwave.rbrequire 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'
#本番環境以外ではS3を参照しないように設定しています。
unless Rails.env.development? || Rails.env.test?
CarrierWave.configure do |config|
config.storage :fog
config.fog_provider = 'fog/aws'
config.fog_directory = 'バケット名'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: アクセスキーID',
aws_secret_access_key: 'シークレットアクセスキー',
region: 'ap-northeast-1',
path_style: true
}
end
end
액세스 키 ID와 비밀 액세스 키는 악용될 수 있으므로 구현할 때 환경 변수를 사용하는 것이 좋습니다.
이번에는 환경 변수의 설정에 대해서는 생략합니다.
환경 변수에 대한 참고 기사 : 【Rails】 dotenv-rails를 사용하여 환경 변수를 관리합시다.
마지막으로
이것으로 설정이 완료됩니다. 실제로 이미지를 업로드하여 S3에 저장되어 있는지 확인해 보세요.
참고 기사
【Rails】 CarrierWave 튜토리얼
Reference
이 문제에 관하여(carrierwave를 사용하여 aws의 s3에 이미지를 업로드 할 수 있도록하고 이미지를 업로드하지 않을 때 기본 이미지를 표시하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yusei_boxing/items/efa1d96c30ae6b2b9c74
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
include CarrierWave::MiniMagick
# only pg,jpeg,gif,png
def extension_white_list
%w(jpg jpeg gif png)
end
if Rails.env.development?
storage :file
elsif Rails.env.test?
storage :file
else
storage :fog
end
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
#注) if original_filename.present?を記載しないと、画像をアップロードしていない場合でもファイル名を作成してしまい、実在しない画像を参照してしまいます。
def filename
if original_filename.present?
time = Time.now
name = time.strftime('%Y%m%d%H%M%S') + '.jpg'
name.downcase
end
end
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'
#本番環境以外ではS3を参照しないように設定しています。
unless Rails.env.development? || Rails.env.test?
CarrierWave.configure do |config|
config.storage :fog
config.fog_provider = 'fog/aws'
config.fog_directory = 'バケット名'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: アクセスキーID',
aws_secret_access_key: 'シークレットアクセスキー',
region: 'ap-northeast-1',
path_style: true
}
end
end
이것으로 설정이 완료됩니다. 실제로 이미지를 업로드하여 S3에 저장되어 있는지 확인해 보세요.
참고 기사
【Rails】 CarrierWave 튜토리얼
Reference
이 문제에 관하여(carrierwave를 사용하여 aws의 s3에 이미지를 업로드 할 수 있도록하고 이미지를 업로드하지 않을 때 기본 이미지를 표시하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yusei_boxing/items/efa1d96c30ae6b2b9c74
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(carrierwave를 사용하여 aws의 s3에 이미지를 업로드 할 수 있도록하고 이미지를 업로드하지 않을 때 기본 이미지를 표시하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yusei_boxing/items/efa1d96c30ae6b2b9c74텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)