Sha256: 9bfa61d1a6a4f60c78fdc954fc1acebda60867e90f7abdfba63bf7cabd7c454d

Contents?: true

Size: 2 KB

Versions: 27

Compression:

Stored size: 2 KB

Contents

# frozen_string_literal: true

namespace :db do
  desc "Downloads the app database from Heroku and imports it to the local database"
  task pull_data: :environment do
    config = if Rails.version.to_f >= 7
      ActiveRecord::Base.connection_db_config.configuration_hash.with_indifferent_access
    else
      ActiveRecord::Base.connection_db_config.config
    end
    ENV["DISABLE_DATABASE_ENVIRONMENT_CHECK"] = "1"
    Rake::Task["db:drop"].invoke
    ENV["PGUSER"] = config["username"]
    ENV["PGHOST"] = config["host"]
    ENV["PGPORT"] = config["port"].to_s
    sh "heroku pg:pull DATABASE_URL #{config["database"]}"
    sh "rails db:environment:set"
    sh "RAILS_ENV=test rails db:create"
  end

  desc "Downloads the app assets from Heroku to directory `storage`."
  task pull_assets: :environment do
    config = JSON.parse(`heroku config --json`)
    ENV["AWS_DEFAULT_REGION"] = config.fetch("AWS_REGION")
    bucket = config.fetch("AWS_BUCKET")
    ENV["AWS_ACCESS_KEY_ID"] = config.fetch("AWS_ACCESS_KEY_ID")
    ENV["AWS_SECRET_ACCESS_KEY"] = config.fetch("AWS_SECRET_ACCESS_KEY")
    storage_folder = Rails.root.join("storage")
    download_folder = storage_folder.join("downloads")
    FileUtils.mkdir_p download_folder
    sh "aws s3 sync s3://#{bucket} #{storage_folder}/downloads"
    download_folder.each_child do |file|
      next if file.directory?

      new_path = storage_folder.join file.basename.to_s.then { |e| [e[0..1], e[2..3], e] }.join("/")
      FileUtils.mkdir_p(new_path.dirname)
      FileUtils.cp(file, new_path)
    end
    # purge variants
    ActiveStorage::VariantRecord.delete_all
    ActiveStorage::Blob.update_all(service_name: :local)
  end

  desc "Download all app data, including assets"
  task pull: [:pull_data, :pull_assets]

  desc "Migrates if the database has any tables."
  task migrate_if_tables: :environment do
    if ActiveRecord::Base.connection.tables.any?
      Rake::Task["db:migrate"].invoke
    else
      puts "No tables in database yet, skipping migration"
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
shimmer-0.0.41 lib/shimmer/tasks/db.rake
shimmer-0.0.40 lib/shimmer/tasks/db.rake
shimmer-0.0.39 lib/shimmer/tasks/db.rake
shimmer-0.0.38 lib/shimmer/tasks/db.rake
shimmer-0.0.37 lib/shimmer/tasks/db.rake
shimmer-0.0.36 lib/shimmer/tasks/db.rake
shimmer-0.0.35 lib/shimmer/tasks/db.rake
shimmer-0.0.34 lib/shimmer/tasks/db.rake
shimmer-0.0.33 lib/shimmer/tasks/db.rake
shimmer-0.0.32 lib/shimmer/tasks/db.rake
shimmer-0.0.31 lib/shimmer/tasks/db.rake
shimmer-0.0.30 lib/shimmer/tasks/db.rake
shimmer-0.0.29 lib/shimmer/tasks/db.rake
shimmer-0.0.28 lib/shimmer/tasks/db.rake
shimmer-0.0.27 lib/shimmer/tasks/db.rake
shimmer-0.0.26 lib/shimmer/tasks/db.rake
shimmer-0.0.25 lib/shimmer/tasks/db.rake
shimmer-0.0.24 lib/shimmer/tasks/db.rake
shimmer-0.0.23 lib/shimmer/tasks/db.rake
shimmer-0.0.22 lib/shimmer/tasks/db.rake