Rails6 ActiveStorage에서 S3에 저장하고 확인할 때까지
5535 단어 ActiveStorageS3Rails비망록
소개
rails로 웹 응용 프로그램을 만들 때 s3에 이미지를 저장하고 싶은 경우가 있었으므로 비망록으로 남겨 둡니다.
개발 환경
windows10
rails 6.1.3.1
vscode
aws s3 설정을 완료했다고 가정합니다.
Active Storage 설정
콘솔에서 다음을 입력합니다.
$ rails active_storage:install
$ rails db:migrate
Active Storage 서비스는 config/storage.yml에서 선언합니다. 응용 프로그램에서 사용하는 각 서비스에 대해 이름과 필요한 구성을 지정합니다.
기본적으로
amazon:
의 코드가 주석 처리되어 있으면 주석 처리를 제거하십시오.이 때의 들여 쓰기에주의!
(코멘트 아웃 무효시에 들여쓰기가 어긋나 버려, 에러의 원인이 됩니다. 필자는 이것에 쌓지 않고 소일시간 방황했습니다.)
config/storage.yml
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
local:
service: Disk
root: <%= Rails.root.join("storage") %>
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: 作成したパケットのリージョン名
bucket: s3で作成したパケット名
acces_key_id,secret_access_key에 대해서는 IAM에서 권한을 부여했을 때 앞에 둔 것을 credentials.yml에 기술
$ rails credentials:edit
aws:
access_key_id: 控えたもの
secret_access_key: 控えたもの
다음에 이용하는 서비스를 ActiveStorage에 인식시킵니다만, 여기는 개발 환경마다 파일이 다릅니다.
이번에는 development 환경에서 s3을 사용했으므로
:amazon
를 작성합니다.config/environments/development.rb
config.active_storage.service = :amazon
Gemfile에 다음 코드 추가
gem "aws-sdk-s3", require: false
그 후 이하 실행$ bundle install
이상으로 환경은 정돈되었습니다. 그리고는 실제로 Model, View, Controller를 써서 확인합니다.
파일을 레코드에 첨부
이번에는 user 모델, user 컨트롤러와 form을 이용하여 s3에 이미지를 저장해 보겠습니다.
스스로 작성할 때는 대응하는 것으로 재기록해 주세요.
우선 user 모델에 avatar를 갖게 합니다.
has_one_attached 매크로는 레코드와 파일 간에 일대일 매핑을 설정합니다. 각 레코드에는 하나의 파일을 첨부할 수 있습니다.
user.rb
class User < ApplicationRecord
has_one_attached :avatar
end
그런 다음 사용자 컨트롤러 설정
user 모델에 name 과 age 를 가지고 있으므로 그들도 함께 받아 저장합니다.
user_controller.rb
class UserController < ApplicationController
def index
end
def create
user = User.create!(user_params)
redirect_to root_path
end
private
def user_params
params.permit(:name, :age, :avatar)
end
end
routes.rb에
resources :user
를 추가하십시오.마지막으로 양식을 만듭니다.
avatar 양식은
form.file_field
user/index.html.erb
<%= form_with model: @user ,local: true do |form| %>
<p>
<%= form.label :name %><br>
<%= form.text_field :name %>
</p>
<p>
<%= form.label :age %><br>
<%= form.text_field :age %>
</p>
<p>
<%= form.label :avatar %><br>
<%= form.file_field :avatar %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
이후 서버를 시작한 후
localhost:3000/user
에서 아래와 같은 화면이 나오므로 이미지 선택을 송신하면 s3에 저장됩니다.이상! 수고하셨습니다.
참고
Rails 가이드(Active Storage 개요)
Rails 가이드 (Rails 시작)
Reference
이 문제에 관하여(Rails6 ActiveStorage에서 S3에 저장하고 확인할 때까지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takutyamo/items/559bb5c14b572828cec9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)