Codest
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Industrier
    • Fintech & bankverksamhet
    • E-commerce
    • Adtech
    • Hälsoteknik
    • Tillverkning
    • Logistik
    • Fordon
    • IOT
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
Pil tillbaka GÅ TILLBAKA
2016-09-30
Utveckling av programvara

GRATIS UTVECKLING MED AWS S3 OCH PAPERCLIP

Bartosz Zurkowski

Under de senaste åren har onlinelagring blivit mainstream och erbjuder mycket skalbara arkitekturer, förbättrad säkerhet och bred datatillgänglighet. En av de mest populära lagringstjänsterna är Amazons Simple Storage Service, allmänt känd som S3.

Amazon S3 är en extremt kraftfull tjänst som utgör kärnan i Amazon Web Services. Utanför produktionsmiljön kan S3 dock vara utmanande att arbeta med. Det handlar om att skicka runt åtkomstnycklar, tillhandahålla användarkonton och upprätthålla en tillförlitlig nätverksanslutning - för att inte tala om att det kostar pengar.Lyckligtvis finns det ett verktyg som hjälper till att lösa detta problem. FakeS3 är en lättviktig server som simulerar beteendet hos den riktiga S3. Den svarar på samma anrop som Amazon S3 svarar på och lagrar uppladdade filer i ditt lokala filsystem - inga förfrågningar görs till Amazons tjänst. Även om gem inte stöder hela uppsättningen S3-kommandon är det implementerade API:et tillräckligt för de flesta applikationsanvändningsfall.

I den här artikeln kommer jag att presentera metoden för att integrera AWS och FakeS3 med Paperclip - populärt bibliotek för filbilagor för Active Record. Paperclip och S3 blandat tillsammans ger ett effektivt fillagringssystem som kombinerar användbara Paperclips kärnfunktioner (som valideringshantering och bildtransformationer) med fördelarna med online-lagring. Även om konfigurationen av dessa verktyg inte är självklar och kräver att man gräver i detaljerad dokumentation samt löser många gem-specifika problem, är det värt att spendera lite tid på att göra utvecklingen snabbare och effektivare.

Vad är vårt mål?

Integrationen av de beskrivna verktygen kräver tre steg:

  1. Startar S3-fakeserver som tillhandahålls av FakeS3 gem i bakgrunden.
  2. Konfigurera AWS S3-klient för att delegera alla förfrågningar till lanserad fakeserver.
  3. Konfigurera Paperclip för att använda falsk S3-slutpunkt i URL:er för inbyggda resurser.

Installation

Låt oss börja med att installera nödvändiga gems:

# Gemfile

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

gem "fakes3", grupp: [:utveckling, :test]

Se till att installera version 1.6 av aws-sdk. Paperclip som använder SKD för att hantera lagring i Amazons tjänst fungerar inte bra med högre versioner av denna pärla. Detta beror på betydande förändringar i SDK: s API som infördes med version 2.0.

Kom också ihåg att huvudsyftet med FakeS3 är att minimera runtime-beroenden. Det är mer av ett utvecklingsverktyg för att testa S3-anrop i din kod snarare än en produktionsserver som vill duplicera S3-funktionalitet. Därför bör du endast inkludera gem i utvecklings- och testgrupper.

AWS-konfiguration

AWS SDK tillhandahåller en dedikerad hjälpmetod som ansvarar för att ladda konfigurationen. Den kommer som standard att ladda konfigurationen från konfiguration/aws.yml, extrahera dess parametrar för den aktuella miljön och skicka dem till AWS-klienten. Först anropar du följande metod i en initialiserare:

# config/initializers/aws.rb

AWS::Rails.load_yaml_config

Nu när konfigurationsfilen har laddats på rätt sätt kan vi fortsätta med att specificera innehållet i den:

# config/aws.yml

utveckling: &utveckling
    access_key_id: "abc"
    hemlig_access_key: "abc"
    s3_endpoint: "localhost"
    s3_port: 10001
    s3_force_path_style: true
    use_ssl: false

test: *utveckling

Låt oss diskutera alla parametrar en efter en:

  • access_key_id, hemlig_access_key - AWS-klientreferenser som krävs för att få tillgång till ditt Amazon-konto. De ignoreras av den falska S3-servern, därav anpassade värden i sandlådemiljöer.
  • s3_slutpunkt, s3_port- Specifikation för S3-slutpunkt. Vi använder dessa parametrar för att ersätta den riktiga S3-slutpunkten med en falsk slutpunkt som startas av FakeS3 gem - alla förfrågningar till Amazons tjänst kommer nu att delegeras till en lokal fakeserver.
  • s3_force_väg_stil - S3 accepterar två sätt att inkludera buckets namn i URL:en. Du kan välja att ha buckets namn placerat i domänstil (bucket.s3.amazonaws.com) eller sökvägsstil (s3.amazonaws.com/bucket). För att hålla saker och ting enkla och undvika extra konfiguration i samband med mappning av buckets subdomän till loopback-adress föredrar jag path-style framför domain-style i utvecklingsmiljön.
  • användning_ssl - tvingar AWS SDK att använda HTTPS istället för vanilj HTTP. Vi måste inaktivera det här alternativet, eftersom FakeS3 gem inte stöder HTTPS-förfrågningar som AWS-klienten utför som standard.

Konfigurationen för produktionsmiljön är ganska okomplicerad:

# config/aws.yml

produktion: &produktion
    access_key_id:     
    hemlig_access_nyckel: 

staging: *produktion

Den här gången handlar det dock om en riktig S3-tjänst, och därför måste du ange autentiska AWS-legitimationsuppgifter.

På grund av potentiella säkerhetsrisker är det en god praxis att hålla hemliga värden som åtkomstnycklar utanför ditt versionskontrollsystem, t.ex. genom att använda miljövariabler. Vi kommer att använda ERB för att injicera dess värden i konfigurationsfilen.

Paperclip-konfiguration

Nu är det dags att möta Paperclip och tvinga den att fungera snyggt med den redan konfigurerade S3-klienten. Huvudmålet med Paperclips konfiguration är att få lagringsvägen som kommer att lokalisera resurser som är värd för fakeserver:

localhost:10001/:bucket_name/:path

Återigen, låt oss börja med utvecklingsmiljön:

# config/paperclip.yml

utveckling: &utveckling
    lagring: :s3
    hink: "utveckling"
    s3_host_name: "localhost"
    url: ":s3_alias_url"
    sökväg: ":class/:attachment/:id_partition/:style/:filename.:extension"
    s3_host_alias: "localhost:10001/development"

test: *utveckling
  • förvaring - anger lagringsmedium (som standard lokalt filsystem). Eftersom vi använder AWS S3 måste vi ändra det till :s3.
  • hink - namnet på den S3-bucket som ska lagra dina filer. Om bucketen inte finns kommer Paperclip att försöka skapa den.
  • url - inställd på :s3_alias_url gör att Paperclip aliasar S3-bucketens värdnamn med det värde som anges av :s3_host_alias parameter.
  • s3_host_alias - alias för standard S3-buckets värd. Observera att placeringen av host, port och buckets namn motsvarar konfigurationen av AWS-klienten.
  • väg - mönster för nycklar under vilka filerna kommer att lagras i bucket. Nycklarna bör vara unika inom bucket, precis som filnamnen. Eftersom S3 inte stöder kataloger kan du använda en / symbolen för att simulera katalogstrukturer.
# config/paperclip.yml

produktion: &produktion
    lagring: :s3
    hink:  
    url:     ":s3_domän_url"
    sökväg:    ":class/:attachment/:id_partition/:style/:filename.:extension"

staging: *produktion

På samma sätt som AWS-legitimationsuppgifter anses bucket-namnet också vara ett hemligt värde som bör lagras utanför din kodbas. Jag rekommenderar att du lagrar dess namn i miljövariabeln.

Slutligen sammanfogar du konfigurationen till Paperclips standardalternativ i en initialiserare:

# config/initializers/paperclip.rb

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

Paperclip::Attachment.default_options.merge! paperclip_defaults

Löpning fakes3

Både AWS- och Paperclip-konfigurationerna innehåller en referens till den lokala S3-fakeservern som förväntas köras under lokalhost:10001. Innan du arbetar med utveckling bör du starta servern med följande kommando (tillhandahålls av FakeS3 gem):

fakes3 -r public/system -p 10001

Godkända parametrar är:

  • rot -r - rotkatalog under vilken uppladdade filer kommer att lagras. Överväg att utesluta den från VCS om du inte vill att uppladdade filer ska lagras i ditt arkiv.
  • port -p - Nummer på den port som den lokala servern körs på.

Om du använder Foreman för processhantering i ditt program kan det vara lämpligt att lägga till följande post i Procfile:

# Procfile

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

Detta kommer att spara tid som går förlorad på att starta fakeserver varje gång du behöver utveckla några S3-relaterade funktioner.

Slutsats

Vi har konfigurerat AWS-klienten för att delegera alla förfrågningar till lokal fakeserver, ställa in Paperclip för att använda falsk S3-slutpunkt i byggda resursers webbadresser och lanserat fakeserver som tillhandahålls av Fake S3 gem som lagrar alla filer i lokalt filsystem.

Resultatet blev att vi blev oberoende av internetanslutning och sparade pengar genom att göra vår utveckling snabbare och mer tillförlitlig.

Relaterade artiklar

Utveckling av programvara

Bygg framtidssäkrade webbappar: Insikter från The Codest:s expertteam

Upptäck hur The Codest utmärker sig genom att skapa skalbara, interaktiva webbapplikationer med banbrytande teknik som ger sömlösa användarupplevelser på alla plattformar. Läs om hur vår expertis driver digital omvandling och affärsutveckling...

DEKODEST
Utveckling av programvara

Topp 10 Lettlandsbaserade mjukvaruutvecklingsföretag

Läs mer om Lettlands främsta mjukvaruutvecklingsföretag och deras innovativa lösningar i vår senaste artikel. Upptäck hur dessa teknikledare kan hjälpa till att lyfta ditt företag.

thecodest
Lösningar för företag och uppskalningsföretag

Java Software Development Essentials: En guide till framgångsrik outsourcing

Utforska denna viktiga guide om framgångsrik outsourcing av Java-programvaruutveckling för att förbättra effektiviteten, få tillgång till expertis och driva projektframgång med The Codest.

thecodest
Utveckling av programvara

Den ultimata guiden till outsourcing i Polen

Den kraftiga ökningen av outsourcing i Polen drivs av ekonomiska, utbildningsmässiga och tekniska framsteg, vilket främjar IT-tillväxt och ett företagsvänligt klimat.

TheCodest
Lösningar för företag och uppskalningsföretag

Den kompletta guiden till verktyg och tekniker för IT-revision

IT-revisioner säkerställer säkra, effektiva och kompatibla system. Läs mer om hur viktiga de är genom att läsa hela artikeln.

Codest
Jakub Jakubowicz CTO och medgrundare

Prenumerera på vår kunskapsbas och håll dig uppdaterad om expertisen från IT-sektorn.

    Om oss

    The Codest - Internationellt mjukvaruutvecklingsföretag med teknikhubbar i Polen.

    Förenade kungariket - Huvudkontor

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

    Polen - Lokala tekniknav

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

      Codest

    • Hem
    • Om oss
    • Tjänster
    • Fallstudier
    • Vet hur
    • Karriär
    • Ordbok

      Tjänster

    • Det rådgivande
    • Utveckling av programvara
    • Backend-utveckling
    • Frontend-utveckling
    • Staff Augmentation
    • Backend-utvecklare
    • Ingenjörer inom molntjänster
    • Dataingenjörer
    • Övriga
    • QA-ingenjörer

      Resurser

    • Fakta och myter om att samarbeta med en extern partner för mjukvaruutveckling
    • Från USA till Europa: Varför väljer amerikanska startup-företag att flytta till Europa?
    • Jämförelse av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinerna), Eurasien (Turkiet)
    • Vilka är de största utmaningarna för CTO:er och CIO:er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Användarvillkor för webbplatsen

    Copyright © 2025 av The Codest. Alla rättigheter reserverade.

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