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 }) }, } } })() UNENTGELTLICHE ENTWICKLUNG MIT AWS S3 UND PAPERCLIP - The Codest
Der Codest
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Branchen
    • Fintech & Bankwesen
    • E-commerce
    • Adtech
    • Gesundheitstechnik
    • Herstellung
    • Logistik
    • Automobilindustrie
    • IOT
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
Pfeil zurück ZURÜCK
2016-09-30
Software-Entwicklung

UNENTGELTLICHE ENTWICKLUNG MIT AWS S3 UND PAPERCLIP

Bartosz Zurkowski

In den letzten Jahren hat sich die Online-Speicherung durchgesetzt und bietet hochskalierbare Architekturen, verbesserte Sicherheit und umfassenden Datenzugriff. Einer der beliebtesten Speicherdienste ist Amazons Simple Storage Service, allgemein bekannt als S3.

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 - 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:

  • access_key_id, secret_access_key - AWS-Client-Anmeldedaten, die für den Zugriff auf Ihr Amazon-Konto erforderlich sind. Sie werden vom gefälschten S3-Server ignoriert, daher benutzerdefinierte Werte in Sandbox-Umgebungen.
  • s3_endpoint, s3_port- S3-Endpunkt-Spezifikation. Wir verwenden diese Parameter, um den echten S3-Endpunkt durch einen gefälschten Endpunkt zu ersetzen, der vom FakeS3-Gem gestartet wird - alle Anfragen an den Amazon-Dienst werden nun an den lokalen Fakeserver delegiert.
  • s3_force_path_style - S3 akzeptiert zwei Arten der Einbeziehung des Bucket-Namens in die URL. Sie können wählen, ob der Bucket-Name im Domain-Stil (bucket.s3.amazonaws.com) oder im Pfad-Stil (s3.amazonaws.com/bucket) platziert werden soll. Um die Dinge einfach zu halten und eine zusätzliche Konfiguration zu vermeiden, die mit der Zuordnung der Subdomain des Buckets zur Loopback-Adresse verbunden ist, ziehe ich in der Entwicklungsumgebung den Pfadstil dem Domänenstil vor.
  • verwenden_ssl - erzwingt, dass AWS SDK HTTPS anstelle von HTTP verwendet. Wir müssen diese Option deaktivieren, da das FakeS3-Gem keine HTTPS-Anfragen unterstützt, die der AWS-Client standardmäßig durchführt.

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
  • Lagerung - gibt den Speicherträger an (standardmäßig lokales Dateisystem). Da wir AWS S3 verwenden, müssen wir dies ändern in :s3.
  • Eimer - Name des S3-Buckets, in dem Ihre Dateien gespeichert werden sollen. Wenn der Bucket nicht existiert, versucht Paperclip, ihn zu erstellen.
  • url - eingestellt auf :s3_alias_url veranlasst Paperclip, den Hostnamen des S3-Buckets mit dem Wert zu aliasieren, der durch :s3_host_alias Parameter.
  • s3_host_alias - Alias für den Host des Standard-S3-Buckets. Beachten Sie, dass die Platzierung von Host, Port und Bucket-Namen der Konfiguration des AWS-Clients entspricht.
  • Pfad - Muster für Schlüssel, unter denen die Dateien im Bucket gespeichert werden sollen. Die Schlüssel sollten innerhalb des Buckets eindeutig sein, wie die Dateinamen. Da S3 keine Verzeichnisse unterstützt, können Sie eine / Symbol, um Verzeichnisstrukturen zu simulieren.
# 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:

  • Wurzel -r - Wurzelverzeichnis, unter dem hochgeladene Dateien gespeichert werden. Ziehen Sie in Erwägung, es aus dem VCS auszuschließen, wenn Sie nicht möchten, dass hochgeladene Dateien in Ihrem Repository gespeichert werden.
  • port -p - Nummer des Ports, auf dem der lokale Server ausgeführt wird.

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.

Ähnliche Artikel

Software-Entwicklung

Zukunftssichere Web-Apps bauen: Einblicke vom The Codest-Expertenteam

Entdecken Sie, wie sich The Codest bei der Erstellung skalierbarer, interaktiver Webanwendungen mit Spitzentechnologien auszeichnet, die nahtlose Benutzererfahrungen auf allen Plattformen bieten. Erfahren Sie, wie unsere Expertise die digitale Transformation und...

DAS SCHÖNSTE
Software-Entwicklung

Top 10 Softwareentwicklungsunternehmen in Lettland

Erfahren Sie in unserem neuesten Artikel mehr über die besten Softwareentwicklungsunternehmen Lettlands und ihre innovativen Lösungen. Entdecken Sie, wie diese Technologieführer Ihr Unternehmen voranbringen können.

thecodest
Enterprise & Scaleups Lösungen

Grundlagen der Java-Softwareentwicklung: Ein Leitfaden für erfolgreiches Outsourcing

Entdecken Sie diesen wichtigen Leitfaden zum erfolgreichen Outsourcing der Java-Softwareentwicklung, um die Effizienz zu steigern, auf Fachwissen zuzugreifen und den Projekterfolg mit The Codest voranzutreiben.

thecodest
Software-Entwicklung

Der ultimative Leitfaden für Outsourcing in Polen

Der Anstieg des Outsourcings in Polen wird durch wirtschaftliche, bildungspolitische und technologische Fortschritte angetrieben, die das IT-Wachstum und ein unternehmensfreundliches Klima fördern.

TheCodest
Enterprise & Scaleups Lösungen

Der vollständige Leitfaden für IT-Audit-Tools und -Techniken

IT-Audits gewährleisten sichere, effiziente und gesetzeskonforme Systeme. Erfahren Sie mehr über ihre Bedeutung, indem Sie den vollständigen Artikel lesen.

Der Codest
Jakub Jakubowicz CTO & Mitbegründer

Abonnieren Sie unsere Wissensdatenbank und bleiben Sie auf dem Laufenden über das Fachwissen aus dem IT-Sektor.

    Über uns

    The Codest - Internationales Software-Unternehmen mit technischen Zentren in Polen.

    Vereinigtes Königreich - Hauptsitz

    • Büro 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale Tech-Hubs

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      Der Codest

    • Startseite
    • Über uns
    • Dienstleistungen
    • Fallstudien
    • Gewusst wie
    • Karriere
    • Wörterbuch

      Dienstleistungen

    • IT-Beratung
    • Software-Entwicklung
    • Backend-Softwareentwicklung
    • Frontend-Softwareentwicklung
    • Staff Augmentation
    • Backend-Entwickler
    • Cloud-Ingenieure
    • Daten-Ingenieure
    • Andere
    • QS-Ingenieure

      Ressourcen

    • Fakten und Mythen über die Zusammenarbeit mit einem externen Softwareentwicklungspartner
    • Aus den USA nach Europa: Warum entscheiden sich amerikanische Start-ups für eine Verlagerung nach Europa?
    • Tech Offshore Development Hubs im Vergleich: Tech Offshore Europa (Polen), ASEAN (Philippinen), Eurasien (Türkei)
    • Was sind die größten Herausforderungen für CTOs und CIOs?
    • Der Codest
    • Der Codest
    • Der Codest
    • Privacy policy
    • Website terms of use

    Urheberrecht © 2025 von The Codest. Alle Rechte vorbehalten.

    de_DEGerman
    en_USEnglish sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek de_DEGerman