Rozwijam się na iOS i przełączam się z backendu PHP na Ruby on Rails. Format wymiany to JSON .
Szybkie wyszukiwanie w Google hasła „zapisz obrazy w Railsach” daje prawie każdy wynik mówiący o zapisywaniu danych obrazu jako obiektów blob w bazie danych. Mogę się mylić, ale mam wrażenie, że zapisywanie danych obrazu w bazie danych to ogromna strata czasu i miejsca (w przeciwieństwie do zapisywania linku do lokalizacji pliku („/img/subcat/4656.png”) .
W PHP standardem jest odbieranie danych, generowanie nazwy pliku, zapisywanie tego pliku na dysku i aktualizowanie bazy danych o położenie obrazu na dysku. Czy to samo dotyczy Ruby on Rails, czy jest jakaś wbudowana funkcja obrazu ActiveRecord, o której nie wiem?
ruby-on-rails
persistence
image
użytkownik
źródło
źródło
Odpowiedzi:
W przeszłości korzystałem z PaperClip z Amazon S3 i CloudFront CDN, aby przyspieszyć dostawę. PaperClip bardzo dobrze obsługuje pamięć S3 po wyjęciu z pudełka: zapoznaj się z dokumentacją opcji konfiguracji pamięci S3 .
s3_host_alias: assets.example.com
. Spowoduje to, że wygenerowane adresy URL do zapisanych zasobów obrazu będą korzystać z hosta dystrybucji CloudFront.config.action_controller.asset_host = http://assets.example.com
. Adresy URL zasobów Ruby on Rails będą wówczas wykorzystywać również dystrybucję CloudFront do buforowania / szybszego dostarczania.To dość szkicowe, ale mam nadzieję, że skieruje cię w stronę przydatnych zasobów. Oczywiście to tylko jedno rozwiązanie, ale to zadziałało dla mnie w sytuacji, gdy miałem do czynienia z setkami tysięcy załączników graficznych w bazie danych.
(Jako możliwy zaawansowany krok, który może nie być konieczny lub przydatny w twoim przypadku, możesz również skonfigurować wiele CNAME dla swojej dystrybucji CloudFront, takich jak
assets0.example.com
iassets1.example.com
. Zarówno spinacz do papieru, jaks3_host_alias
iaction_controller.asset_host
następnie możesz pobrać lambdas, które pozwolą ci deterministycznie (na podstawie zasób) generuje adresy URL, które używają różnych hostów, dla lepszej równoległości, jeśli pobierasz ich kilka na tej samej stronie, ponieważ przeglądarki ograniczą maksymalną liczbę jednoczesnych połączeń z tym samym hostem).źródło
Próbowałem kilku klejnotów, ale teraz używam FineUploader razem z PaperClip
FineUploader obsługuje dla Ciebie wiele GUI, na przykład postęp przesyłania, przeciąganie i upuszczanie oraz przesyłanie wielu plików i tak dalej. Korzystam z PaperClip, ponieważ chcę przechowywać obrazy na moich serwerach zamiast na S3.
Zwykle szukamy stabilnego, konfigurowalnego rozwiązania, zamiast odtwarzać rzeczy od zera. Za pomocą PaperClip przechowuję obrazy, a za pomocą StateMachine dokonuję konwersji obrazów i umieszczam je w kategorii na podstawie nazwy pliku. Miałem to samo pytanie, co ty, i to było moje najlepsze działające rozwiązanie, dlatego dzielę się tym.
źródło