LoginSignup
10
4

More than 5 years have passed since last update.

ActiveStorageを利用してファイルをアップロードする際に「undefined method `upload' for nil:NilClass」エラーが発生する

Last updated at Posted at 2018-04-25

activestorage.png

問題点

ActiveStorageを利用してファイルをアップロードする際に「undefined method `upload' for nil:NilClass」エラーが発生する

再現手順

  1. アプリをRails 5.0から5.2へバージョンアップ
  2. rails active_storage:installrails db:migrateを実行してActiveStorageをインストール
  3. Mode, Controller, Viewにファイルアップロードに必要な設定を追記
  4. ブラウザからファイルアップロード操作を行うと問題点に記載したエラーが発生

原因

  • ActiveStorageを利用するために必要な設定が不足していた

解決方法

environments/*.rb にコンフィグを追記

config/environments/development.rb
# Store uploaded files on the local file system (see config/storage.yml for options)
config.active_storage.service = :local
config/environments/test.rb
# Store uploaded files on the local file system (see config/storage.yml for options)
config.active_storage.service = :test
config/environments/production.rb
# Store uploaded files on the local file system (see config/storage.yml for options)
config.active_storage.service = :local

storage.ymlを追加

config/storage.yml
test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
# 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: us-east-1
#   bucket: your_own_bucket

# Remember not to checkin your GCS keyfile to a repository
# google:
#   service: GCS
#   project: your_project
#   credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>
#   bucket: your_own_bucket

# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
# microsoft:
#   service: AzureStorage
#   storage_account_name: your_account_name
#   storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
#   container: your_container_name

# mirror:
#   service: Mirror
#   primary: local
#   mirrors: [ amazon, google, microsoft ]

補足

追記した設定、作成したyamlについてはRails 5.2でアプリを新規作成した時にデフォルトで作成される設定ファイルを参考にした

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4