allt
Företag
datavetenskap
design
utveckling
vår resa
Strategimönster
Tack! Din inlämning har mottagits!
Hoppsan! Något gick fel när du skickade in formuläret.
Tack! Din inlämning har mottagits!
Hoppsan! Något gick fel när du skickade in formuläret.
Diogo Dias

Mars 13, 2023

Min läsning

Hur man migrerar Paperclip-tillgångar till Amazon S3

Nyligen, efter att ha distribuerat en webbapp på en dedikerad server, insåg vi att disklagringen skulle vara en framtida flaskhals för applikationens verksamhet.

Det skulle kräva ett exponentiellt utrymme under tiden för appanvändning eftersom det så småningom kommer att användas på många samtidiga platser samtidigt, medan du kommunicerar med en central server som laddar upp hundra megabyte tillgångar.


Vi bestämde oss för att flytta lagringen från vår dedikerade server till Amazon AWS S3 för att öka skalbarheten för applikationen.

Enkla saker, kan vi säga i det här skedet. Byt bara någon konfiguration i Paperclip för att använda S3.

blå pil till vänster
Imaginary Cloud-logotyp

Det första problemet

Tja, problemet var att appen redan var i produktion, så förändringen krävde att vi flyttade alla befintliga tillgångar till S3 för att förhindra att data förlorades (uppenbarligen!).

Ett problem inom problemet

Under vår forskning hittade vi en enkel lösning för att migrera alla tillgångar till S3. Lösningen över hela Internet är ganska självförklarande; skicka bara mappen där dina tillgångar lagras till S3 (den välkända allmänhet/system mapp)!

Detta skulle fungera i en situation där webbadress av Paperclip-konfigurationen definierades tidigare. Standardinställningen schema som Paperclip använder hamnar i en fil med platsen som:

För att förhindra att du förlorar tid på att räkna ut var /000/000/ kom från, förklaringen till alla ledande 0, och för att skapa en flexibel lösning bestämde vi oss för att göra vår egen strategi.

Krav

  1. Vi måste flytta alla modellbilagor;
  2. Vi måste bevara alla stilar;
  3. Detta måste göras utan att låsa servern;
  4. S3-skopa bör vara olika beroende på Rails-miljöer (test, produktion, iscenesättning);
  5. Vi måste ha minimal stilleståndstid.

Lösning

Först måste vi kunna byta konfiguration på Paperclip för att använda S3 efter migrering och för att använda vår server under migrering (vi måste hämta bilagorna).

Låt oss se en typisk modell med bilagor:

 

För att förbereda modellen som ska migreras till S3-tjänsten måste vi lägga till en switch som enkelt kan aktiveras.

Låt oss skapa en s3_migrate.yml fil med viss konfiguration:


Från rad 1 till 4 är den normala konfigurationen för Paperclip S3-lagring, i rad 5 lade vi till omkopplaren för att aktivera S3.

Om det inte är aktiverat bör programmet betjäna tillgångarna från den lokala servern. Därefter ändrar vi vår modelldefinition för att återspegla dessa förändringar.


I det här utdraget lagrar vi Paperclip-alternativen i en hash (LAGRINGSALTERNATIV FÖR PAPPERSKLIPP) och ladda filen som innehåller migreringsalternativen. Vi slår samman S3-inställningarna om aktiverat är sant.

För tillfället har vi förberett vår modell för att byta till S3 efter att migreringsprocessen är klar.

MIGRATION

För att migrera våra tillgångar till S3 behöver vi en anpassad uppgift för att utföra åtgärden. Här är utdraget som ansvarar för det.

Skapa en fil med namnet paperclip_migrate.rake och sätta på den lib/uppgifter mapp och klistra in koden ovan.

Kör uppgiften:


** Efter avslutad migrering måste vi uppdatera vår s3_migrate.yml och aktivera S3-lagringen. **

Ändra bara linjen aktiverad till sant. Starta om webbservern och du är klar!

Anmärkning 1: Baninställningen i s3_migrate.yml bör vara lika med den i raden 44 i uppgiften. Ändra det enligt ditt scenario.

Anmärkning 2: När du har slutfört migreringen och försäkrat att våra tillgångar har migrerats till S3 kan du ta bort filerna som fortfarande är lagrade i allmänhet/system.

Slutsats

Låt oss iterera igenom våra krav för detta problem och validera var och en av dem.

1 - Vi måste flytta alla modellbilagor

När vi lägger till möjligheten att specificera klassen och objekten dynamiskt kan man utföra uppgiften med vilka modeller som helst, exempel:


Genomfört!

2 - Vi måste bevara alla stilar

I vår uppgift, efter att vi har kontrollerat att det finns minst ett objekt i vår databas, kan vi fråga det för att hämta alla definierade stilar:

Det kommer att returnera vad vi förväntar oss:

Genomfört!

3 - Detta måste göras utan att låsa servern

Vi använder en rake-uppgift för att utföra migreringen så att den kan köras utan att påverka användningen av applikationen i produktionsmiljön.

Genomfört!

4 - S3-skopan bör vara annorlunda beroende på Rails-miljöer

I vår s3_migrate.yml vi definierar tillgångarnas väg för att använda Rails.env variabel, så tillgångarna sparas i enlighet med miljön som applikationen körs.

Genomfört!

5 - Vi måste ha minsta stilleståndstid

Vi behöver bara en enda omstart till webbservern! Så vi kan säga att kravet var...

Genomfört!

Och det handlar om allt du behöver veta för att migrera Paperclip-tillgångar från en lokal server till Amazon S3.

Ready for a UX Audit? Book a free call

Hittade den här artikeln användbar? Du kanske gillar dessa också!

blå pil till vänster
Imaginary Cloud-logotyp
blå pil till vänster
Imaginary Cloud-logotyp
blå pil till vänster
Imaginary Cloud-logotyp
blå pil till vänster
Imaginary Cloud-logotyp
blå pil till vänster
Imaginary Cloud-logotyp
blå pil till vänster
Imaginary Cloud-logotyp
blå pil till vänster
Imaginary Cloud-logotyp
blå pil till vänster
Imaginary Cloud-logotyp
blå pil till vänster
Imaginary Cloud-logotyp
blå pil till vänster
Imaginary Cloud-logotyp
Diogo Dias
Diogo Dias

Erfarenhet av backend-system för webben med hjälp av toppmodern teknik. Full stackutvecklare & produkttillverkare. Rubin/Räls, NodeJS, ElectronJS.

Läs fler inlägg av denna författare

Människor som läste det här inlägget tyckte också att dessa var intressanta:

pil vänster
pilen till höger
Dropdown caret icon