window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versjon: 2, } ;(function () { var w = vindu if (w.LeadBooster) { console.warn('LeadBooster finnes allerede') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() thecodest, Author at The Codest - Page 18 of 18

Amazon S3 er en ekstremt kraftig tjeneste som utgjør kjernen i Amazon Web Services. Utenfor produksjonsmiljøet kan S3 imidlertid være utfordrende å jobbe med. Det innebærer å sende tilgangsnøkler rundt, opprette brukerkontoer og opprettholde en pålitelig nettverkstilkobling - for ikke å snakke om at det koster penger. FakeS3 er en lettvektsserver som simulerer oppførselen til den ekte S3. Den svarer på de samme anropene som Amazon S3 svarer på, og lagrer opplastede filer i ditt lokale filsystem - ingen forespørsler sendes til Amazons tjeneste. Selv om gem ikke støtter alle S3-kommandoer, er det implementerte API-et tilstrekkelig for de fleste bruksområder.

I denne artikkelen skal jeg presentere metoden for å integrere AWS og FakeS3 med Paperclip - et populært filvedleggsbibliotek for Active Record. Paperclip og S3 blandet sammen gir et effektivt fillagringssystem som kombinerer nyttige Paperclips kjernefunksjoner (som valideringsadministrasjon og bildetransformasjoner) med fordelene med online lagring. Selv om konfigurasjonen av disse verktøyene ikke er åpenbar og krever at man graver seg ned i detaljert dokumentasjon samt løser mange gem-spesifikke problemer, er det verdt å bruke litt tid på å gjøre utviklingen raskere og mer effektiv.

Hva er målet vårt?

Integrering av de beskrevne verktøyene krever tre trinn:

  1. Starter S3-fakeserver levert av FakeS3-perlen i bakgrunnen.
  2. Konfigurere AWS S3-klienten til å delegere alle forespørsler til en lansert fakeserver.
  3. Konfigurere Paperclip til å bruke falske S3-endepunkter i URL-adresser for innebygde ressurser.

Installasjon

La oss begynne med å installere nødvendige gems:

# Gemfile

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

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

Sørg for å installere versjon 1.6 av aws-sdk. Paperclip, som bruker SKD til å administrere lagring i Amazons tjeneste, fungerer ikke godt med høyere versjoner av denne perlen. Dette skyldes betydelige endringer i SDKs API med versjon 2.0.

Husk også at hovedmålet med FakeS3 er å minimere kjøretidsavhengigheter. Det er mer et utviklingsverktøy for å teste S3-kall i kode i stedet for en produksjonsserver som ønsker å duplisere S3-funksjonalitet. Derfor bør du bare inkludere gem i utviklings- og testgrupper.

AWS-konfigurasjon

AWS SDK tilbyr en dedikert hjelpemetode som er ansvarlig for å laste inn konfigurasjon. Den vil som standard laste inn konfigurasjon fra config/aws.ymlhenter ut parametrene for det aktuelle miljøet og sender dem til AWS-klienten. Først kaller du følgende metode i en initialisator:

# config/initializers/aws.rb

AWS::Rails.load_yaml_config

Nå som konfigurasjonsfilen er lastet inn på riktig måte, kan vi fortsette med å spesifisere innholdet i den:

# config/aws.yml

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

test: *utvikling

La oss diskutere alle parametrene én etter én:

Konfigurasjonen for produksjonsmiljøet er ganske enkel:

# config/aws.yml

produksjon: &produksjon
    access_key_id:     
    secret_access_key: 

staging: *produksjon

Denne gangen har vi imidlertid å gjøre med en ekte S3-tjeneste, og du må derfor oppgi autentisk AWS-legitimasjon.

På grunn av potensielle sikkerhetsrisikoer er det lurt å holde hemmelige verdier som tilgangsnøkler utenfor versjonskontrollsystemet, f.eks. ved å bruke miljøvariabler. Vi bruker ERB til å injisere verdiene i konfigurasjonsfilen.

Paperclip-konfigurasjon

Nå er det på tide å møte Paperclip og tvinge den til å fungere fint med den allerede konfigurerte S3-klienten. Hovedmålet med Paperclips konfigurasjon er å få tak i lagringsstien som vil finne ressurser som er vert for fakeserver:

localhost:10001/:bucket_name/:path

Igjen, la oss begynne med utviklingsmiljøet:

# config/paperclip.yml

utvikling: &utvikling
    lagring: :s3
    bucket: "development"
    s3_host_name: "localhost"
    url: ":s3_alias_url"
    path: ":class/:attachment/:id_partition/:style/:filename.:extension"
    s3_host_alias: "localhost:10001/development"

test: *development
# config/paperclip.yml

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

staging: *produksjon

På samme måte som AWS-legitimasjon, anses bøtte-navnet også å være en hemmelig verdi som bør lagres utenfor kodebasen din. Jeg anbefaler å lagre navnet i en miljøvariabel.

Til slutt kan du slå sammen konfigurasjonen med Paperclips standardalternativer i en initialiser:

# config/initializers/paperclip.rb

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

Paperclip::Attachment.default_options.merge! paperclip_defaults

Kjører fakes3

Både AWS- og Paperclip-konfigurasjonene inneholder en referanse til den lokale S3-fakeserveren som forventes å kjøre under localhost:10001. Før du begynner å jobbe med utvikling, bør du starte serveren med følgende kommando (levert av FakeS3 gem):

fakes3 -r public/system -p 10001

Overførte parametere er:

Hvis du bruker Foreman til prosessadministrasjon i programmet ditt, kan det være praktisk å legge til følgende oppføring i Procfile:

# Procfile

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

Dette vil spare deg for å bruke tid på å starte fakeserveren hver gang du trenger å utvikle S3-relaterte funksjoner.

Konklusjon

Vi har konfigurert AWS-klienten til å delegere alle forespørsler til lokal fakeserver, konfigurert Paperclip til å bruke falske S3-sluttpunkter i URL-adressene til innebygde ressurser og lansert fakeserver levert av Fake S3 gem som lagrer alle filer i lokalt filsystem.

Dermed ble vi uavhengige av Internett-tilkobling og sparte penger, noe som gjorde utviklingen vår raskere og mer pålitelig.

nb_NONorwegian