Question:
My app deploys to Heroku but crashes every time. I don’t know why. I have set up Carrierwave, fog, and aws for an app in production on Heroku before just fine. Tried to follow the same steps and I am getting an h10 error code. In the rails console it specifically says:
/app/vendor/bundle/ruby/2.3.0/gems/activestorage-5.2.1/lib/active_storage/engine.rb:76:in
`block (2 levels) in ‘: Couldn’t find Active Storage
configuration in /app/config/storage.yml (RuntimeError)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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: amazon: service: S3 access_key_id: "S3_KEY" secret_access_key: "S3_SECRET" region: "us-east-1" bucket: "books4reviews" |
production.rb
1 2 |
config.active_storage.service = :amazon |
carrierwave.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CarrierWave.configure do |config| config.fog_provider = 'fog/aws' config.fog_credentials = { provider: 'AWS', aws_access_key_id: ENV['S3_KEY'], aws_secret_access_key: ENV['S3_SECRET'], region: 'us-east-1' } config.fog_directory = 'books4reviews' config.fog_public = false config.storage = :fog end |
puma.rb
1 2 3 4 5 6 7 8 9 |
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } threads threads_count, threads_count port ENV.fetch("PORT") { 3000 } environment ENV.fetch("RAILS_ENV") { "development" } plugin :tmp_restart |
Procfile
1 2 |
web: bundle exec puma -C config/puma.rb |
avatar_uploader.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
class AvatarUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: # include CarrierWave::RMagick # Choose what kind of storage to use for this uploader: include CarrierWave::MiniMagick storage :fog process resize_to_fit: [500,500] version :small do process resize_to_fill: [200, 200] end version :medium do # change the word 'fit' to 'fill' process resize_to_fill: [400,600] end version :large do process resize_to_fill: [1000,1000] end version :thumb do process resize_to_fill: [50, 50] end def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def extension_white_list %w(jpg jpeg gif png) end end |
I’ve set my env variables for the aws credentials in my heroku config variables from the terminal. Can you tell me why I’m getting this active storage error? Thanks
Answer:
I had this same issue when deploying a recently upgraded Rails app. The application was upgraded from Rails 5 to Rails 6. However, when I try deploying to Heroku, I got the error below:
1 2 3 4 |
2021-02-12T17:32:33.404828+00:00 app[web.1]: ! Unable to load application: RuntimeError: Couldn't find Active Storage configuration in /app/config/storage.yml 2021-02-12T17:32:33.404874+00:00 app[web.1]: bundler: failed to load command: puma (/app/vendor/bundle/ruby/2.7.0/bin/puma) 2021-02-12T17:32:33.404958+00:00 app[web.1]: RuntimeError: Couldn't find Active Storage configuration in /app/config/storage.yml |
Here’s how I fixed it:
I checked the config
directory of my application and realized that it had no config/storage.yml
file. All I had to do was to create the file, and copy the vanilla template that comes with Rails 6 applications into the file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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 ] |
This time when I deployed everything worked fine.
Note: You can modify the file content based on your storage configurations
That’s all.
I hope this helps