window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } 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 è un servizio estremamente potente al centro di Amazon Web Services. Tuttavia, al di fuori dell'ambiente di produzione, S3 può essere difficile da utilizzare. Si tratta di passare le chiavi di accesso, di fornire gli account utente e di mantenere una connessione di rete affidabile, per non parlare dei costi. Per fortuna esiste uno strumento che aiuta a risolvere questo problema. FakeS3 è un server leggero che simula il comportamento del vero S3. Risponde alle stesse chiamate a cui risponde Amazon S3 e memorizza i file caricati nel vostro filesystem locale, senza che vengano effettuate richieste al servizio di Amazon. Sebbene gem non supporti l'intero set di comandi di S3, l'API implementata è sufficiente per la maggior parte dei casi di utilizzo delle applicazioni.

In questo articolo presenterò l'approccio all'integrazione di AWS e FakeS3 con Paperclip, una popolare libreria di file allegati per Active Record. Paperclip e S3 insieme forniscono un efficace sistema di archiviazione dei file che combina le utili funzionalità di base di Paperclip (come la gestione delle convalide e le trasformazioni delle immagini) con i vantaggi dell'archiviazione online. Sebbene la configurazione di questi strumenti non sia ovvia e richieda una documentazione dettagliata e la risoluzione di molti problemi specifici della gemma, vale la pena spendere un po' di tempo per rendere lo sviluppo più veloce ed efficiente.

Qual è il nostro obiettivo?

L'integrazione degli strumenti descritti richiede tre fasi:

  1. Avvio del fakeserver S3 fornito dalla gemma FakeS3 in background.
  2. Configurazione del client AWS S3 per delegare tutte le richieste al fakeserver lanciato.
  3. Configurazione di Paperclip per utilizzare il falso endpoint S3 negli URL delle risorse costruite.

Installazione

Iniziamo installando le gemme necessarie:

# Profilo della gemma

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

gemma "fakes3", gruppo: [:development, :test]

Assicurarsi di installare la versione 1.6 di aws-sdk. Paperclip, che utilizza SKD per gestire lo storage nel servizio di Amazon, non funziona bene con le versioni superiori di questa gemma. Ciò è dovuto a cambiamenti significativi nell'API dell'SDK apportati con la versione 2.0.

Ricordare inoltre che l'obiettivo principale di FakeS3 è quello di ridurre al minimo le dipendenze di runtime. Si tratta più che altro di uno strumento di sviluppo per testare le chiamate S3 nel vostro codice piuttosto che un server di produzione che vuole duplicare le funzionalità di S3. Pertanto, si dovrebbe includere la gemma solo nel gruppo di sviluppo e di test.

Configurazione AWS

L'SDK di AWS fornisce un metodo di aiuto dedicato al caricamento della configurazione. Per impostazione predefinita, carica la configurazione da config/aws.yml, estrarre i suoi parametri per l'ambiente corrente e passarli al client AWS. Innanzitutto, chiamare il metodo seguente in un inizializzatore:

# config/initializers/aws.rb

AWS::Rails.load_yaml_config

Ora che il file di configurazione è stato caricato correttamente, possiamo procedere a specificarne il contenuto:

# config/aws.yml

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

test: *sviluppo

Analizziamo tutti i parametri uno per uno:

La configurazione per l'ambiente di produzione è piuttosto semplice:

# config/aws.yml

produzione: &produzione
    access_key_id:     
    secret_access_key: 

staging: *produzione

Questa volta, però, abbiamo a che fare con un vero servizio S3, quindi è necessario fornire credenziali AWS autentiche.

A causa dei potenziali rischi per la sicurezza, è buona norma tenere i valori segreti, come le chiavi di accesso, fuori dal sistema di controllo della versione, ad esempio usando le variabili d'ambiente. Useremo ERB per iniettare i suoi valori nel file di configurazione.

Configurazione della graffetta

Ora è il momento di affrontare Paperclip e forzarlo a lavorare in modo corretto con il client S3 già configurato. L'obiettivo principale della configurazione di Paperclip è ottenere il percorso di memorizzazione che localizzerà le risorse ospitate da fakeserver:

localhost:10001/:bucket_name/:path

Ancora una volta, iniziamo con l'ambiente di sviluppo:

# config/paperclip.yml

sviluppo: &sviluppo
    archiviazione: :s3
    bucket: "development"
    nome_host_s3: "localhost
    url: ":s3_alias_url"
    percorso: ":class/:attachment/:id_partition/:style/:filename.:extension"
    s3_host_alias: "localhost:10001/development"

test: *sviluppo
# config/paperclip.yml

produzione: &produzione
    archiviazione: :s3
    bucket:  
    url:     ":s3_domain_url"
    percorso:    ":class/:attachment/:id_partition/:style/:filename.:extension"

staging: *produzione

Analogamente alle credenziali AWS, anche il nome del bucket è considerato un valore segreto che deve essere memorizzato al di fuori della base di codice. Si consiglia di memorizzare il nome in una variabile d'ambiente.

Infine, unire la configurazione alle opzioni predefinite di Paperclip in un inizializzatore:

# config/initializers/paperclip.rb

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

Paperclip::Attachment.default_options.merge! paperclip_defaults

Esecuzione di fakes3

Entrambe le configurazioni di AWS e Paperclip contengono un riferimento al fakeserver S3 locale che dovrebbe essere eseguito sotto localhost:10001. Prima di lavorare allo sviluppo è necessario lanciare il server con il seguente comando (fornito dalla gemma FakeS3):

fakes3 -r public/system -p 10001

I parametri passati sono:

Se si utilizza Foreman per la gestione dei processi nella propria applicazione, può essere conveniente aggiungere la seguente voce in Procfile:

Profilo di processo #

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

In questo modo si risparmierà il tempo perso per lanciare fakeserver ogni volta che si dovrà sviluppare qualche funzionalità legata a S3.

Conclusione

Abbiamo configurato il client AWS in modo che deleghi tutte le richieste al fakeserver locale, abbiamo impostato Paperclip in modo che utilizzi l'endpoint S3 falso negli URL delle risorse costruite e abbiamo lanciato il fakeserver fornito dal gemma Fake S3 che memorizza tutti i file nel filesystem locale.

Di conseguenza, siamo diventati indipendenti dalla connessione a Internet e abbiamo risparmiato denaro, rendendo il nostro sviluppo più veloce e affidabile.

it_ITItalian