4

Rails raises exception when config.active_storage.service is not explicitly set

 1 year ago
source link: https://blog.saeloun.com/2022/11/02/exception-active-record-config
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Rails raises exception when config.active_storage.service is not explicitly set

Nov 2, 2022 , by Swaathi Kakarla

1 minute read

ActiveStorage makes it easy for developers to upload files to cloud services like Amazon S3, Google Cloud Storage, and more. It also provides a local disk service for development and testing. Rails reads the config value config.active_storage.service to determine which service to use. If this value is not set, Rails will raise an exception.

However, when the config.active_storage.service is not set, the application raises a vague error causing unnecessary time lost to debugging.

Before

This value is set in the environment file via the rails active_storage:install command. However, in some cases it can be removed or commented out.

Let’s use a simple example to demonstrate this. We have a User model with an avatar attachment.

  class User < ApplicationRecord
    has_one_attached :avatar
  end

When we try to upload an avatar, we get the following error:

  /Users/swaathi/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/activestorage-7.0.4/app/models/active_storage/blob.rb:90:in `build_after_unfurling': missing keyword: :filename (ArgumentError)   

This is a cryptic error that does not give us any indication of what the problem is. It takes significant effort to figure out that the config.active_storage.service is not set.

After

Thanks to this PR ActiveStorage gives much more descriptive errors when the config.active_storage.service is not set.

  /Users/swaathi/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/bundler/gems/rails-1d849dfbe8f0/activestorage/lib/active_storage/attached/model.rb:226:in `validate_global_service_configuration': Missing Active Storage service name. Specify Active Storage service name for config.active_storage.service in config/environments/development.rb (RuntimeError)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK