Tag: Rails

VIPserv vs Hostpower – Część II – moja opinia nt. VIPserv

Po doświadczeniach z firmą Hostpower (opisanych tutaj) postanowiłem podejść do kwestii hostingu dużo bardziej rygorystycznie. Przede wszystkim 2 tygodnie testów, podczas których przetestuje każdy możliwy aspekt działania Railsowych aplikacji na hostingu. Postanowiłem przetestować także sam kontakt i poziom wiedzy adminów.

Odpowiemy - i to nawet z nadmiarem informacji

Przyzwyczajony do lakonicznych "nie da się" bądź "zgłoszone - czekaj parę miesięcy", byłem cholernie zaskoczony szybkością oraz co ważniejsze jakością udzielanych mi odpowiedzi. Na każde moje pytanie, zadane mailowo - otrzymywałem odpowiedź w przeciągu 0.5 - 12h (zależnie od pory).

Każda odpowiedź od administratora zawierała wyczerpującą odpowiedź na moje pytanie oraz bardzo często także rozwinięcie odpowiedzi w formie linków do ich własnego, często uzupełnianego wiki, czy też innych stron.

Admin słucha - czyli nie piszesz w próżnię

Poza odpowiedziami na pytania związane z hostingiem, bardzo szybko reagują także na zgłoszenia błędów w ich autorskim panelu (o którym później) czy też inne uwagi.
W przeciągu kilku miesięcy naszej współpracy, zgłosiłem kilka uwag które nie były nawet usterkami a raczej propozycjami "usprawnienia" hostingu. Jakież było moje zdziwienie gdy za pierwszym razem, otrzymałem odpowiedź że moja propozycja została wdrożona i już działa :)

Ostatnią taką propozycję wysłałem 4 dni temu. Od 3 dni działa w systemie :)

Wiem, umiem a jak nie to przynajmniej się przyznam

Oczywiście nikt nie jest idealny i nikt nie wie wszystkiego. Na jedno z pytań admin nie umiał odpowiedzieć, do czego się przyznał. Po znalezieniu odpowiedzi na pytanie, wysłałem ją adminowi - po czym trafiła ona do ich wiki.

Livechat - pytasz, odpowiadają

Kolejną bardzo przydatną rzeczą jest livechat z adminem. Wystarczy wejść na stronę hostingu, zalogować się i pytać admina. Świetna sprawa jeśli mamy jakieś wątpliwości i chcemy je szybko rozwiać. Livechat działa praktycznie codziennie (a czasem nawet w weekendy).

Rails - passenger i wszystko gra

To tyle jeśli chodzi o kwestie kontaktowo-wiedzowe. Zero zastrzeżeń. Jeśli chodzi o Railsy i ich obsługę - wszystko działa bardzo dobrze. Aplikacje hostowane są na passengerze, przez co zarówno prędkość jak i stabilność działania, są na bardzo wysokim poziomie.

Oczywiście jest SSH i możliwość instalacji własnych gemów (która w hostpower czasem działała a czasem nie). Także jeśli chodzi o działanie aplikacji napisanych w Ruby on Rails - jest bardzo dobrze. Projekt tworzy się z poziomu autorskiego panelu. Następnie uploaduje kod i migruje przez ssh.

Autorski panel - czyli wiemy co mamy

Jak już wyżej wspomniałem, panel jaki ma VIPserv jest rozwiązaniem autorskim. Szata graficzna jest ascetyczna, jednak mi to odpowiada. Wszystko czego potrzebuję znajduje się w opcjach panelu. Jeśli czegoś nie ma to albo zrobić można to po SSH albo zgłosić. Jestem pewien że uwzględnią.

I to by było na tyle. Odkąd jestem w VIPservie, nie miałem żadnych problemów z kodem. Czy to pisanym w RoRze czy też w PHP (czystym czy Zendzie). Nie miałem także problemów z innymi usługami.

Pad zdarzył się jeden. 15 minutowy - Apache ze względu na błąd w kernelu, zawiesił się. Administrator dodał po tej awarii stosowne zabezpieczenie zapobiegające temu.

Z czystym sumieniem mogę polecić ten hosting jako godny uwagi·

Rails + przechowywanie wielu obrazów (miniaturek, avatarów, zdjęć) w systemie

Przeglądając devpytania natknąłem się na pytanie dotyczące przechowywania zdjęć użytkowników w serwisie - biorąc pod uwagę ilości "hurtowe" (link).

Nie miałem potrzeby aby wdrażać takie rozwiązanie, ponieważ nie pisałem nigdy części systemu, która miałaby przechowywać ponad 32k plików (chociaż ostatnio się to zmieniło ;) ). Wychodząc naprzeciw wyzwaniu, postanowiłem dodać taką opcję i jak to bywa w wypadku Railsów - nie zajęło mi to zbyt wiele czasu.

Rozwiązanie znalazłem tutaj. Jest ono proste jak konstrukcja cepa a jego wdrożenie nie zajmuje zbyt wiele czasu.

W katalogu config/initializers tworzymy sobie plik, np o nazwie: paperclip_extensions.rb czy tam czymś podobnym, po czym wstawiamy do tego pliku taki oto kod:

Paperclip.interpolates :hashed_path do |attachment, style|
  hash = Digest::MD5.hexdigest(attachment.instance.id.to_s + 'cos_tam_tajnego')
  hash_path = ''
  3.times { hash_path += '/' + hash.slice!(0..2) }
  hash_path[1..12]
end

Mimo że pierwotny autor na blogu uważa że cos_tam_tajnego nie jest istotne, ja pozwolę się z nim nie zgodzić ;)

Dodanie soli do tego hasha, sprawia że ktoś kto chciałby "zassać" nasze zdjęcia, przy pomocy jakiegoś kodu automatycznego, będzie miał utrudnione zadanie.

Nie dając soli, potencjalny "złodziej" bardzo szybko zauważy prawidłowość pt: MD5(id) i podział na 3 części. Stosując tutaj sól oraz moje rozwiązanie z tego wątku - zabezpieczamy się w dużym stopniu przed tego typu zagrywkami.

Po dodaniu tego rozszerzenia do Paperclipa, otrzymujemy nowe słowo "klucz" do wykorzystania z tym pluginem. Jest to :hashed_path który możemy wykorzystać tak samo jak np: :id_:style.:extension, tworząc przykładowo taką oto ścieżkę:

:url => "/pictures/:hashed_path/:id/:id_:style.:extension"

:hashed_path zostanie zamieniony na strukturę katalogów w stylu /ghw/jre/fhw. Dzięki temu w jednym katalogu nie będzie przechowywana zbyt duża liczba plików co mogłoby się skończyć problemami z systemem plików.

Według mnie implementacja tego kodu jest na tyle prosta i szybka, że warto ją włączać nawet w projekty które nie mają w założeniach być "super obciążone", ponieważ jak to w internecie bywa - wszyscy wiemy ;)

Copyright © 2025 Closer to Code

Theme by Anders NorenUp ↑