window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = Fenster if (w.LeadBooster) { console.warn('LeadBooster existiert bereits') } 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 ist ein extrem leistungsfähiger Service, der den Kern von Amazon Web Services bildet. Außerhalb der Produktionsumgebung kann es jedoch schwierig sein, mit S3 zu arbeiten. Es erfordert die Weitergabe von Zugangsschlüsseln, die Einrichtung von Benutzerkonten und die Aufrechterhaltung einer zuverlässigen Netzwerkverbindung - ganz zu schweigen davon, dass es Geld kostet. FakeS3 ist ein leichtgewichtiger Server, der das Verhalten des echten S3 simuliert. Er reagiert auf die gleichen Aufrufe wie Amazon S3 und speichert hochgeladene Dateien in Ihrem lokalen Dateisystem - es werden keine Anfragen an Amazons Dienst gestellt. Obwohl gem nicht den vollen Satz von S3-Befehlen unterstützt, ist die implementierte API für die meisten Anwendungsfälle ausreichend.

In diesem Artikel werde ich den Ansatz der Integration von AWS und FakeS3 mit Paperclip vorstellen - einer beliebten Bibliothek für Dateianhänge für Active Record. Paperclip und S3 zusammen bieten ein effektives Dateispeichersystem, das nützliche Paperclip-Kernfunktionen (wie Validierungsmanagement und Bildtransformationen) mit den Vorteilen der Online-Speicherung kombiniert. Auch wenn die Konfiguration dieser Tools nicht ganz einfach ist und einen Blick in die ausführliche Dokumentation sowie die Lösung vieler gem-spezifischer Probleme erfordert, lohnt es sich, etwas Zeit zu investieren, um die Entwicklung schneller und effizienter zu gestalten.

Was ist unser Ziel?

Die Integration der beschriebenen Werkzeuge erfordert drei Schritte:

  1. Start des S3-Fakeservers, der vom FakeS3-Gem im Hintergrund bereitgestellt wird.
  2. Konfigurieren des AWS S3-Clients, um alle Anfragen an den gestarteten Fakeserver zu delegieren.
  3. Konfigurieren von Paperclip zur Verwendung eines gefälschten S3-Endpunkts in den URLs der erstellten Ressourcen.

Einrichtung

Beginnen wir mit der Installation der erforderlichen Edelsteine:

# Gemfile

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

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

Stellen Sie sicher, dass Sie Version 1.6 von aws-sdk installieren. Paperclip, das SKD zur Verwaltung von Speicherplatz in Amazons Service verwendet, funktioniert nicht gut mit höheren Versionen dieses Edelsteins. Dies ist auf wesentliche Änderungen in der API des SDK zurückzuführen, die mit Version 2.0 eingeführt wurden.

Denken Sie auch daran, dass das Hauptziel von FakeS3 darin besteht, die Laufzeitabhängigkeiten zu minimieren. Es ist eher ein Entwicklungswerkzeug zum Testen von S3-Aufrufen in Ihrem Code und nicht auf einem Produktionsserver, der die S3-Funktionalität duplizieren soll. Daher sollten Sie gem nur in Entwicklungs- und Testgruppen einsetzen.

AWS-Konfiguration

AWS SDK bietet eine eigene Hilfsmethode, die für das Laden der Konfiguration zuständig ist. Sie lädt die Konfiguration standardmäßig von config/aws.ymlextrahieren Sie die Parameter für die aktuelle Umgebung und übergeben Sie sie an den AWS-Client. Rufen Sie zunächst die folgende Methode in einem Initialisierungsprogramm auf:

# config/initializers/aws.rb

AWS::Rails.load_yaml_config

Nun, da die Konfigurationsdatei ordnungsgemäß geladen wurde, können wir mit der Angabe ihres Inhalts fortfahren:

# config/aws.yml

Entwicklung: &Entwicklung
    access_key_id: "abc"
    secret_access_key: "abc"
    s3_endpunkt: "localhost"
    s3_port: 10001
    s3_force_path_style: wahr
    use_ssl: falsch

test: *Entwicklung

Lassen Sie uns alle Parameter nacheinander besprechen:

Die Konfiguration für die Produktionsumgebung ist ziemlich einfach:

# config/aws.yml

Produktion: &Produktion
    access_key_id:     
    secret_access_key: 

staging: *production

Diesmal handelt es sich jedoch um einen echten S3-Dienst, weshalb Sie authentische AWS-Anmeldedaten angeben müssen.

Aufgrund potenzieller Sicherheitsrisiken ist es eine gute Praxis, geheime Werte wie Zugriffsschlüssel aus dem Versionskontrollsystem herauszuhalten, z. B. durch die Verwendung von Umgebungsvariablen. Wir werden ERB verwenden, um seine Werte in die Konfigurationsdatei zu injizieren.

Büroklammer-Konfiguration

Jetzt ist es an der Zeit, Paperclip zu konfrontieren und es zu zwingen, mit dem bereits konfigurierten S3-Client zu arbeiten. Das Hauptziel der Konfiguration von Paperclip ist es, den Speicherpfad zu erhalten, der die von fakeserver gehosteten Ressourcen auffindet:

localhost:10001/:bucket_name/:path

Beginnen wir wieder mit der Entwicklungsumgebung:

# config/paperclip.yml

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

test: *Entwicklung
# config/paperclip.yml

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

staging: *Produktion

Ähnlich wie die AWS-Anmeldedaten gilt auch der Bucket-Name als geheimer Wert, der außerhalb Ihrer Codebasis gespeichert werden sollte. Ich empfehle, seinen Namen in einer Umgebungsvariablen zu speichern.

Zum Schluss fügen Sie die Konfiguration in die Standardoptionen von Paperclip in einem Initialisierungsprogramm ein:

# config/initializers/paperclip.rb

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

Paperclip::Attachment.default_options.merge! paperclip_defaults

Laufende Fälschungen3

Sowohl AWS- als auch Paperclip-Konfigurationen enthalten einen Verweis auf den lokalen S3-Fakeserver, der unter localhost:10001. Bevor Sie mit der Entwicklung beginnen, sollten Sie den Server mit dem folgenden Befehl starten (der von FakeS3 gem bereitgestellt wird):

fakes3 -r öffentlich/system -p 10001

Übergebene Parameter sind:

Wenn Sie Foreman für die Prozessverwaltung in Ihrer Anwendung verwenden, kann es sinnvoll sein, den folgenden Eintrag in Procfile hinzuzufügen:

# Profildatei

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

Dies erspart Ihnen die Zeit, die Sie jedes Mal mit dem Start von fakeserver verlieren, wenn Sie einige S3-bezogene Funktionen entwickeln müssen.

Schlussfolgerung

Wir haben den AWS-Client so konfiguriert, dass er alle Anfragen an den lokalen Fakeserver delegiert, Paperclip so eingerichtet, dass es den gefälschten S3-Endpunkt in den URLs der erstellten Ressourcen verwendet, und den von Fake S3 gem bereitgestellten Fakeserver gestartet, der alle Dateien im lokalen Dateisystem speichert.

Dadurch wurden wir unabhängig von einer Internetverbindung und sparten Geld, was unsere Entwicklung schneller und zuverlässiger machte.

de_DEGerman