2014-12-08 10 views
15

Czy istnieje taka koncepcja, jak "montowanie" folderu zasobów w aplikacji Heroku, a następnie łączenie go z zasobnikiem S3?Folder Mount S3 w aplikacji Heroku

Mam aplikację węzła z "publicznym" folderem zasobów. Chciałbym .signignore "publiczny" folder w moim lokalnym projekcie, mam pomruk przesłać do s3, a git popchnąć kod do Heroku kiedy się uruchomi. Folder "publiczny" będzie widoczny, ale pochodzi z zasobnika S3, a nie z lokalnego systemu plików Heroku.

Spojrzałem na Heroku's docs, ale (oprócz ustawienia zmiennych env) nie ma "automagic", który wydaje się zamontować twoje wiadro S3 do lokalnego folderu Heroku/aplikacji.

Odpowiedz

2

Nie jestem świadomy żadnego rozwiązania z pudełka. Ale podstawowa konfiguracja wydaje się być w zasięgu. Oto pierwsze przejście przy użyciu dynamiczny segment w trasie i przekierowanie w kontrolerze:

w 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 

Oczywiście można podstawić ulubiona metoda łączenia się z plikami S3 i musisz zdefiniować get_bucket i tak dalej.

To oczywiście powoduje trafienie tylko w ważne klucze, w przeciwnym razie dostaniesz "nie ma takiego klucza". Jeśli szukasz operacji indeksowania/ls, oczywiście więcej trzeba zrobić, ale podstawowa struktura powinna ci to umożliwić, o ile masz rozsądny sposób na uzyskanie danych, których szukasz z S3 .