Categories

viimeksi päivitetty May 08, 2018

Rails 5.2 esitteli aktiivisen tallennustilan keinona hallita tiedostojen liittämistä ja tallentamista aktiivisiin Tallennusmalleihin. Tässä oppaassa kerrotaan, miten aktiivista tallennustilaa käytetään Herokulla.

Ephemeral Disk

Herokulla on ”ephemeral” – kiintolevy, joten levylle voi kirjoittaa tiedostoja, mutta ne tiedostot eivät säily sovelluksen uudelleenkäynnistyksen jälkeen. Oletusarvoisesti Aktiivinen tallennus käyttää :local – tallennusvaihtoehtoa, joka käyttää paikallista tiedostojärjestelmää tallennettujen tiedostojen tallentamiseen. Vaikka :local – valinnalla tallennetut tiedostolataukset näyttävät aluksi toimivan, liitteet käyttäytyvät oudosti ja lopulta katoavat. Tiedostot katoavat, kun sovellus otetaan käyttöön, tai kun se käynnistyy automaattisesti uudelleen (kerran 24 tunnin välein). Jos sovelluksessa on useita dynoja, kaikkia tiedostoja ei ole jokaisessa dynossa. Tämä tarkoittaa, että web-pyyntöä tarjoava dyno saattaa olla erilainen kuin tietyn ladatun tiedoston sisältävä dyno. Esimerkiksi jos sinulla on kaksi dynoa ja lataat tiedoston, se on vain yhdellä dynolla. Kun päivität verkkosivun, on 50% mahdollisuus, että web-pyyntö reititetään dynoon tiedoston kanssa, ja 50% mahdollisuus, että se näyttää olevan rikki. Lisäksi levylle tallennetut tiedostot eivät näy yksittäisistä dynoista, kuten heroku run bash-instanssista tai ajoitustehtävästä, koska nämä komennot käyttävät uusia dynoja.

ladattujen tiedostojen tallentamisen sijaan paras käytäntö on hyödyntää pilvitiedostojen tallennuspalvelua, kuten Amazonin S3.

jos haluat käyttää eri tallennustaustajärjestelmää, sinun on muokattava config/storage.yml – tiedostoa. Jos käytät bucketeer addon hallita S3 sinulle, voit lisätä tämän config/storage.yml:

amazon: service: S3 access_key_id: <%= ENV %> secret_access_key: <%= ENV %> region: <%= ENV %> bucket: <%= ENV %>

kun olet tehnyt tämän, sinun on kerrottava sovelluksellesi, että käytät tätä tallennustaustajärjestelmää tuotannossa. Varmista config/environments/production.rb : ssä, että olet asettanut aktiivisen tallennuspalvelusi amazon-palveluun:

 config.active_storage.service = :amazon

lopuksi sinun täytyy myös sisällyttää AWS helmi. Lisää tämä Gemfile:

gem "aws-sdk-s3", require: false

älä unohda suorittaa tätä komentoa paikallisesti:

$ bundle install

toimita tiedostot sitten gitiin ennen kuin yrität ottaa ne käyttöön Herokuun.

Attachment Previews

yksi aktiivisen tallennustilan ominaisuuksista on mahdollisuus käyttää muiden kuin kuvanliitteiden ”esikatseluja”. Erityisesti voit esikatsella PDF-tiedostoja ja videoita. Käyttääksesi tätä ominaisuutta sovelluksesi tarvitsee pääsyn järjestelmäresursseihin, jotka osaavat käyttää näitä tiedostoja. Oletuksena Rails-alukset, joilla on tuki poppler PDF-esikatselussa ja ffmpeg videon esikatselussa. Nämä järjestelmän riippuvuudet eivät ole oletusarvoisesti käytettävissä Herokussa.

jos haluat esikatsella tämän tyyppisiä tiedostoja aktiivisella tuella, sinun on suoritettava:

$ heroku buildpacks:add -i 1 https://github.com/heroku/heroku-buildpack-activestorage-preview

kun olet tehnyt tämän, sinun täytyy ottaa uudelleen käyttöön saadaksesi binäärit. Voit varmistaa, että riippuvuudet on asennettu ajamalla which ffmpeg komentorivillä. Jos ulostuloa ei ole, toimenpidettä ei suoritettu oikein. Jos näet tuloksen, binäärit ovat valmiita käytettäväksi:

$ heroku run bash~$ which ffmpeg/app/.heroku/activestorage-preview/usr/bin/ffmpeg

jos yrität esikatsella PDF-tiedostoa ilman poppler, sivu tekee virheen ja näet tämän lokeissasi:

ActionView::Template::Error (ActiveStorage::UnpreviewableError)

jos yrität esikatsella videota ilman ffmpeg, esikatselu näyttää olevan rikki ja näet tällaisen virheen lokeissasi:

Errno::ENOENT (No such file or directory - ffmpeg):

Vastaa

Sähköpostiosoitettasi ei julkaista.