Папка Mount S3 в приложении Heroku

Существует ли такая концепция, как "установка" папки с ресурсами в вашем приложении Heroku, а затем ее привязка к ведро S3?

У меня есть приложение node с общей папкой с ресурсами. Я хотел бы .slugignore "общедоступную" папку в моем локальном проекте, загрузить grunt в s3 bucket и git направить код на Heroku, когда он запустится. "Публичная" папка будет видна, но получена из ведра S3 вместо локальной файловой системы Heroku.

Я смотрел документы Heroku, но (помимо установки переменных env) нет "автоматических", которые, похоже, монтируют ваш ведро S3 в локальный Хероку/папка приложения.

Ответы

Ответ 1

Я не знаю ни одного из готового решения. Но базовая установка кажется в пределах досягаемости. Здесь первый проход с использованием динамического сегмента в маршруте и перенаправление в контроллере:

в routes.rb:

get 's3/:file_key', to: 's3_redirects#show'

s3_redirects_controller.rb:

class S3RedirectsController < ApplicationController
  def show
    bucket = get_bucket
    file_key = params[:file_key]
    file_key += "." + params[:format] if params[:format].present?
    s3_file_link = RightAws::S3Interface.new(your_config_options_here).get_link(bucket, file_key, link_expiration_time)
    redirect_to s3_file_link
  end
end

Очевидно, вы можете заменить свой любимый метод взаимодействия с вашими файлами S3, и вам нужно определить get_bucket и т.д.

Это, конечно, касается только действительных ключей, в противном случае вы получите "нет такого ключа". Если вы ищете операции индексирования/типа ls, то, конечно, нужно сделать больше, но базовая структура здесь должна позволить вам это сделать, если у вас есть разумный способ получить данные, которые вы ищете, от S3.