Amazon S3 on äärmiselt võimas teenus, mis on Amazon Web Services'i keskmes. Kuid väljaspool tootmiskeskkonda võib S3-ga töötamine olla keeruline. See hõlmab juurdepääsu võtmete edasiandmist, kasutajakontode loomist ja usaldusväärse võrguühenduse säilitamist - rääkimata sellest, et see maksab raha. õnneks on olemas tööriist, mis aitab seda probleemi lahendada. FakeS3 on kerge server, mis simuleerib tõelise S3-i käitumist. See vastab samadele kõnedele, millele Amazon S3 vastab, ja salvestab üleslaetud failid teie kohalikku failisüsteemi - Amazon'i teenusele ei tehta ühtegi päringut. Kuigi gem ei toeta kõiki S3-i käske, on rakendatud API piisav enamiku rakenduste kasutusjuhtumite jaoks.

Selles artiklis tutvustan lähenemist, kuidas integreerida AWS ja FakeS3 koos Paperclipiga - populaarne faili manuste raamatukogu Active Record'i jaoks. Paperclip ja S3 koos pakuvad tõhusat failihoiusüsteemi, mis ühendab kasulikke Paperclip'i põhifunktsioone (nagu valideerimiste haldamine ja pilditransformatsioonid) veebipõhise salvestamise eelistega. Kuigi nende tööriistade konfigureerimine ei ole ilmselge ja nõuab üksikasjalikku dokumentatsiooni kaevamist ning paljude pärli-spetsiifiliste probleemide lahendamist, tasub kulutada veidi aega, et muuta arendus kiiremaks ja tõhusamaks.

Mis on meie eesmärk?

Kirjeldatud vahendite integreerimine nõuab kolme etappi:

  1. FakeS3 gemi poolt pakutava S3 võltsserveri käivitamine taustal.
  2. AWS S3 kliendi konfigureerimine, et delegeerida kõik päringud käivitatud võltsserverile.
  3. Paperclip'i konfigureerimine, et kasutada võltsitud S3-päätepunkti ehitatud ressursi URL-ides.

Paigaldamine

Alustame vajalike pärlite paigaldamisega:

# Gemfile

gem "paberklamber"
gem "aws-sdk", "~> 1.6"

gem "fakes3", group: [:development, :test]

Veenduge, et installite aws-sdk versiooni 1.6. Paperclip, mis kasutab SKD-d Amazoni teenuse salvestusruumi haldamiseks, ei tööta hästi selle pärli kõrgemate versioonidega. Selle põhjuseks on olulised muudatused SDK API-s, mis toodi versiooniga 2.0.

Pidage ka meeles, et FakeS3 peamine eesmärk on minimeerida sõltuvusi tööajast. See on pigem arendusvahend, et testida S3-kõnesid oma kood pigem kui tootmisserver, mis soovib dubleerida S3-funktsioone. Seetõttu peaksite lisama gemi ainult arendus- ja testrühma.

AWS konfiguratsioon

AWS SDK pakub spetsiaalset abimeetodit, mis vastutab konfiguratsiooni laadimise eest. See laadib vaikimisi konfiguratsiooni aadressilt config/aws.yml, ekstraheerib selle parameetrid praeguse keskkonna jaoks ja edastab need AWS kliendile. Kõigepealt kutsuge järgmist meetodit initsialiseerijas:

# config/initializers/aws.rb config/initializers/aws.rb

AWS::Rails.load_yaml_config

Nüüd, kui meil on konfiguratsioonifail korralikult laetud, saame jätkata selle sisu määramisega:

# config/aws.yml

development: &development
    access_key_id: "abc"
    secret_access_key: "abc"
    s3_endpoint: "localhost"
    s3_port: 10001
    s3_force_path_style: true
    use_ssl: false

test: *development

Käsitleme kõiki parameetreid ükshaaval:

Tootmiskeskkonna seadistamine on üsna lihtne:

# config/aws.yml

production: &production
    access_key_id:     
    secret_access_key: 

staging: *production

Seekord on aga tegemist tõelise S3-teenusega, mistõttu peate esitama autentsed AWS-i volitused.

Võimalike turvariskide tõttu on hea tava hoida salajased väärtused, nagu näiteks juurdepääsu võtmed, versioonihaldussüsteemist eemal, näiteks kasutades keskkonnamuutujaid. Me kasutame ERB-i, et süstida selle väärtused konfiguratsioonifaili.

Kirjaklambrite konfiguratsioon

Nüüd on aeg Paperclipiga silmitsi seista ja sundida seda juba konfigureeritud S3-kliendiga kenasti töötama. Paperclip'i konfigureerimise peamine eesmärk on saada salvestusruumi tee, mis leiab fakeserveri poolt majutatud ressursid:

localhost:10001/:bucket_name/:path

Alustame jälle arenduskeskkonnast:

# config/paperclip.yml

development: &development
    ladustamine: :s3
    bucket: "development"
    s3_host_name: "localhost"
    url: ":s3_alias_url"
    path: "id_partition/:style/:failinimi.:extension"
    s3_host_alias: "localhost:10001/development"

test: *development
# config/paperclip.yml

production: &production
    ladustamine: :s3
    bucket:  
    url:     ":s3_domain_url"
    path:    ".:class/:attachment/:id_partition/:style/:filename.:extension"

staging: *production

Sarnaselt AWS-i mandaatidele peetakse ka bucket'i nime salajaks väärtuseks, mida tuleks hoida väljaspool teie koodibaasi. Soovitan selle nime salvestada keskkonnamuutujasse.

Lõpuks ühendage konfiguratsioon Paperclip'i vaikimisi valikutesse initsialiseerijas:

# config/initializers/paperclip.rb config/initializers/paperclip.rb

paperclip_defaults = Rails.application.config_for :paperclip
paperclip_defaults.symbolize_keys!

Paperclip::Attachment.default_options.merge! paperclip_defaults

Käivitatud võltsingud3

Nii AWS-i kui ka Paperclip'i konfiguratsioonid sisaldavad viidet kohalikule S3 võltsserverile, mida eeldatavasti käivitatakse all localhost:10001. Enne arendustegevuses töötamist peaksite käivitama serveri järgmise käsuga (mida pakub FakeS3 gem):

fakes3 -r public/system -p 10001

Edastatud parameetrid on järgmised:

Kui kasutate oma rakenduses Foremani protsesside haldamiseks, võib olla mugav lisada Procfile'ile järgmine kirje:

# Procfile

fakes3: fakes3 -r ${FAKES3_STORAGE_PATH:-public/system} -p ${FAKES3_PORT:-10001}

See aitab säästa aega, mis kulub fakeserveri käivitamisele iga kord, kui teil on vaja arendada mõningaid S3-ga seotud funktsioone.

Kokkuvõte

Oleme seadistanud AWS-i kliendi delegeerima kõik päringud kohalikule võltsserverile, seadistanud Paperclip'i kasutama võlts S3-päätepunkti ehitatud ressursi URL-ides ja käivitanud võlts S3 gemi poolt pakutava võltsserveri, mis salvestab kõik failid kohalikus failisüsteemis.

Selle tulemusel muutusime sõltumatuks internetiühendusest ja säästsime raha, muutes meie arendustegevuse kiiremaks ja usaldusväärsemaks.

etEstonian