kontakta oss

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.
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!).
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.
Vi måste flytta alla modellbilagor;
Vi måste bevara alla stilar;
Detta måste göras utan att låsa servern;
S3-skopa bör vara olika beroende på Rails-miljöer (test, produktion, iscenesättning);
Vi måste ha minimal stilleståndstid.
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.
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.
Låt oss iterera igenom våra krav för detta problem och validera var och en av dem.
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!
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!
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!
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!
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.


Erfarenhet av backend-system för webben med hjälp av toppmodern teknik. Full stackutvecklare & produkttillverkare. Rubin/Räls, NodeJS, ElectronJS.
Människor som läste det här inlägget tyckte också att dessa var intressanta: