Active storage images are not persisting in disk

Hi everyone!

I’m using Rails 7.0.4.3. I’m having an issue when attaching images to some model instances on my Seeds. In this case, I’m running menu.image.attach.

This works as expected locally. However, when running the seeds in fly.io the images are stored for a short amount of time and are displayed in the front-end, though after a couple of minutes the images are not there any more.

Some one knows what could be the issue in this case? Thank you very much!

This is how my Gemfile looks:

source "https://rubygems.org"

git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby "3.1.2"

# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"

gem "rails", "~> 7.0.4"

# The original asset pipeline for Rails [https://github.com/rails/sprockets-rails]

gem "sprockets-rails"

# Use postgresql as the database for Active Record

gem "pg", "~> 1.1"

# Use the Puma web server [https://github.com/puma/puma]

gem "puma", "~> 5.0"

# Bundle and transpile JavaScript [https://github.com/rails/jsbundling-rails]

gem "jsbundling-rails"

# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]

gem "turbo-rails"

# Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev]

gem "stimulus-rails"

# Build JSON APIs with ease [https://github.com/rails/jbuilder]

gem "jbuilder"

# Use Redis adapter to run Action Cable in production

# gem "redis", "~> 4.0"

# Use Kredis to get higher-level data types in Redis [https://github.com/rails/kredis]

# gem "kredis"

# Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword]

# gem "bcrypt", "~> 3.1.7"

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem

gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ]

# Reduces boot times through caching; required in config/boot.rb

gem "bootsnap", require: false

# Use Sass to process CSS

gem "sassc-rails"

# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]

# gem "image_processing", "~> 1.2"

gem "devise"

gem "autoprefixer-rails"

gem "font-awesome-sass", "~> 6.1"

gem "simple_form", github: "heartcombo/simple_form"

group :development, :test do

# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem

gem "debug", platforms: %i[ mri mingw x64_mingw ]

gem "dotenv-rails"

end

group :development do

# Use console on exceptions pages [https://github.com/rails/web-console]

gem "web-console"

# Add speed badges [https://github.com/MiniProfiler/rack-mini-profiler]

# gem "rack-mini-profiler"

# Speed up commands on slow machines / big apps [https://github.com/rails/spring]

# gem "spring"

end

group :test do

# Use system testing [https://guides.rubyonrails.org/testing.html#system-testing]

gem "capybara"

gem "selenium-webdriver"

gem "webdrivers"

end

gem "tailwindcss-rails", "~> 2.0"

gem "cloudinary"

gem "dockerfile-rails", ">= 1.2", :group => :development

The default config/storage.yml contains the following:

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

If you don’t change this, the data will not persist across re-deploys. The solution is to create a fly volume for this data.

Once the volume is created, change config/storage.yml to look something like this:

local:
  service: Disk
  public: true
  root: <%= ENV.fetch('RAILS_STORAGE', Rails.root.join("storage")) %>

Finally, modify your fly.toml to mount the volume and set the RAILS_STORAGE environment variable:

[env]
  RAILS_STORAGE = "/mnt/volume/storage"

[mounts]
  source = "storage_volume"
  destination = "/mnt/volume"

Replace storage_volume with the name you selected when you created the volume.

3 Likes

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.