RoR na windows

@drogus

Generalnie to używałem gentoo, red hat, debian, ubuntu i różnych dziwnych rzeczy ale w pewnym momencie mi przeszło. Dokładnie jakiś czas po tym kiedy wyszedł Windows 7 i kupiłem nowy sprzęt. Pod linuksem po prostu nie dało się go obsłużyć i musiałbym czekać z pół roku. Bo jednak nie ukrywajmy jeśli chcemy używać linuksa jako desktopa to trzeba się liczyć z tym, że będziemy regularnie tracić trochę czasu na różnego rodzaju incydentalne sytuacje i konfiguracje.

“Mnie to trochę boli, że windows jest tak słabo obsługiwany, bo to robi rubiemu kiepski PR wśród początkujących. Jeżeli człowiek jako pierwszą rzecz słyszy: “musisz zmienić system”, to nie zdziwiłbym się gdyby taka osoba stwierdziła, że nie chce się pakować w technologię, która tylko udaje przenośność - udaje, bo jak się czyta o zaletach rubiego, to można łatwo znaleźć informację o tym, że działa nie tylko na linuxie, co niby jest prawdą, ale w praktyce windows nie jest obywatelem pierwszej kategorii.”

Ja tam w ogóle tego nie odebrałem jako coś negatywnego :slight_smile: Nawet jest to dla mnie jak najbardziej zrozumiałe i pozytywne :slight_smile: Na przenośności akurat średnio mi zależy. Docelowo i tak na pewno nie będzie nic stało na windowsie ale jako tymczasowe środowisko pracy przed wydaniem jakiejś wersji beta by się przydało. Generalnie z drugiej strony dużo rzeczy działa tylko pod windowsem dobrze, a zdecydowanie najgorszą rzeczą byłoby dla mnie posiadanie dwóch oddzielnych systemów do pracy.

Mac jest nieracjonalnie droższy w europie niż w USA. Do tego jeszcze pensje mamy niższe :wink:

Wolę to zrobić tak jak ma to wyglądać docelowo, zamiast 3 razy zmieniać instalacje.

Windows w ogóle dla szanującego się programisty (sprawdzić czy nie .NET) powinien być systemem drugiej kategorii. Nie tylko rubiowcy tak uważają: spróbuj znaleźć pythonowca chętnego do pisania w Windows. Na pewnym poziomie zaawansowania w PHP i Javie też się okazuje że system z Redmond jest zwyczajnie mało przyjazny i upierdliwy.

Postawienie Ubuntu w Virtualboksie zajęłoby Ci połowę tego czasu jaki spędziłeś na wylewaniu tu żali że rubiowcy mają lepsze rzeczy do roboty niż wspieranie systemu który sam się wyałtował niezgodnością z POSIX.

@Tomash
Przecież ja się nie żalę. Prowadzę dyskusję merytoryczną :slight_smile: Pythonowca na windowsa na pewno nie znajdę, byłoby to absurdalne :slight_smile:

@tjeden jak możesz odpowiedz na pytanie @drogus bo to może być meritum dyskusji :slight_smile:

zainstaluj jakiegoś przyjaznego linuxa. Po miesiącu będziesz się śmiał na myśl, że próbowałeś pracować na windows :wink:

Szczerze mówiąc, to też nie wiem, jaki jest problem z instalacją Ubuntu jako drugiego systemu? Ani to przecież nie wymaga wydzielenia jakiejś wielkiej partycji, ani nie zabiera dużo czasu.

@OwiecPL: tak jak pisały osoby wyżej w przypadku ruby/rails lepiej pracować na jakimś systemie posiksowym np. Linux (najlepiej ubuntu) lub Mac OS X. Powodów jest wiele:

  1. Tradycyjne implementacje języków takich jak ruby, python (przez tradycyjne rozumiem tutaj implementacje nie działające w oparciu o JVM, .NET itp.) zostały napisane w oparciu o systemy posiksowe, czy tam uniksowe. Oczywiście są rozszerzenia dla windows (loadery dla .NET, czy też biblioteki do wołania funkcji z win32), ale to jest margines.

  2. Jeśli nie masz doświadczenia z kompilatorami, linkerami, loaderami, bibliotekami współdzielonymi to lepiej zacznij od Linuksa (najlepiej od ubuntu, ponieważ ma najlepsze wsparcie). Jeśli chcesz działać na innych systemach to musisz wziąć pod uwagę to, że będziesz musiał się gimnastykować np. z instalacją nginx/passwenger tak jak pisałeś w pierwszy swoim poście. Nawet na Mac OS X, mimo że to system posikowy oparty na BSD to trzeba czasem się pogimnastykować :slight_smile:

  3. Odnośnie maszyny wirtualnej z linuksem na windowsie lub uogólniając po prostu edytować kod na Windowsie a odpalać go na zdalnej maszynie to rozwiązanie to działa, ale nie jest najwygodniejsze. Ja dla przykładu czasem tak pracuję - ale ja rubego wykorzystuję do bardziej sieciowych i systemowych rzeczy niż www. Kod piszę na moim maku, który po nfs/ssh/smb ma podłączony filesystem ze zdalnej maszyny.

Tak czy inaczej mamy dwa rozwiązania:

a) mamy maszynę wirtualną z linuksem i tam pracujemy. Minusem są zasoby (kolejny system) oraz problem z odpaleniem kombajnów, które potrzebują trochę zasobów (np. Rubymine - jeśli używasz oczywiście). Dwa, że imho lepiej w takim przypadku lepiej jako drugi system zainstalować sobie linuksa na drugim dysku/partycji.

b) tak jak ja to robię, czyli montowanie zdalnego filesystemu. Denerwujące jest wtedy jednak to, że niektóre rzeczy muszę robić dwa razy. Gemy instaluję na lokalnej i zdalnej maszynie (rubymine mi lokalnie krzyczy jak ich nie ma, a zdalnie jak nie mam gemów to nie odpalę aplikacji). Jest też opóźnienie i spadek wydajności w przypadku przeszukiwania plików na zdalnych filesystemie. Lepiej już grepować sobie na zdalnej maszynie.

Ludzie są różni i potrzeby są różne. Nie ma jednoznacznej odpowiedzi. Moja opinia jest taka:

  1. Jeśli nie musisz pracować na windowsie i odpalać później swojego programu na windowsie (polityczne sprawy w firmie np. polityki bezpieczeństwa itp.) to nie pracuj na windowsach w rubym. Lepszy jest tu linux.

  2. Osobiście wolę, aby ludzie zamiast tracić czas na przystosowywanie rubego do pracy z windowsami poświęcili swój czas na dodawanie nowych ficzerów np. do rails, ale to jest wyłącznie mój i tylko mój punkt widzenia :slight_smile:

  3. Windows (szczególnie wersje serwerowe) to bardzo dobry system operacyjny i kupa wymiatających technologii, ale z rubym bym go nie żenił :slight_smile:

Ja tak na prawdę rozważam już tylko 2 możliwości:

  1. własny serwer zdalny z linuksem i RoR
  2. np. heroku.com, które w pewien sposób spełnia rolę zdalnego serwera. Nie wiem tylko jak wygląda sprawa z edycją plików lokalnie i ich odpaleniem zdalnie. Jeśli za każdym razem kiedy coś zmienię będzie trzeba coś kompilować czy też robić coś innego co daje jakieś większe opóźnienie to odpada. Jak to wygląda w praktyce? Czy wgrywając jakąś poważniejszą aplikację i robiąc w niej zmiany muszę zrobić coś poza samym nadpisaniem danego pliku?

Zrobię testy co się sprawdza i podzielę się wnioskami.

A tak z innej beczki co takiego trzyma cie przy windows ?

@lewy313

A tak z innej beczki co takiego trzyma cie przy windows ?[/quote]
To dyskusja bardziej filozoficzna. Jakoś z 8 (?) lat temu mnie oświeciło i zacząłem używać tylko linuksa. W ogóle używanie windowsa wydawało mi się bezsensu i tfu ale jakieś 2-3 lata temu zmądrzałem raz jeszcze i zainstalowałem windows 7. To dlaczego to na prawdę filozoficzna dyskusja, w której każdy ma swoje zdanie, ale w skrócie sprowadza się to do tego:

  1. Używanie na jednym komputerze jednego systemu jest o wiele lepsze niż używaniu dwóch systemów ( np. drugi dysk ) na jednym komputerze. Przełączanie się za każdym razem jak chce coś zrobić i dbanie o oba systemy jest zbyt uciążliwe i czasochłonne.
  2. System którego używam ma pozwalać mi pracować i cieszyć się wszystkim co oferuje informatyka. Niestety windows wciąż pozwala cieszyć się większą ilością rzeczy niż linuks, przynajmniej jeśli chodzi o sprawy desktopowe.
  3. System ma służyć do pracy na nim, a nie pracy nad systemem. Niestety podczas około 3-letniej pracy na windows 7 miałem 0 sytuacji, w których działo się coś złego z systemem. Pod linuksem to się jednak zdarzało przy aktualizacjach, a aktualizacje niestety trzeba robić bo cały czas są poprawiane istotne błędy i dodawane istotne zmiany w sterownikach dla nowszego sprzętu.

Czyli wszystko sprowadza się do tego ile Cie kosztuje czasu i energii utrzymanie linuksa w porównaniu do windowsa. Ten czas i energię można przeznaczyć na coś innego.

Żeby nie było np. mojej matce zainstalowałem kila lat temu Ubuntu i cieszy się nim do dnia dzisiejszego ale używa go głównie do poczty i przeglądarki :slight_smile: Tak, więc jak najbardziej jestem zwolennikiem linuksów ale nie jako systemów desktopowych. Ja wiem, że według najnowszych trendów linuks > windows ale przynajmniej moje doświadczenie mówi mi, że wszystko ma swój czas i miejsce, a także przeznaczenie użytkowe :slight_smile: Niestety nie mogę się wypowiedzieć o MACach bo używałem tylko powierzchownie. Jakkolwiek konsola linuksa jest niezastąpiona i system ten wygrywa jako system konsolowy, czyli jest idealny na serwer na oddzielnej maszynie.

Takie jest przynajmniej moje zdanie :slight_smile:

[quote=OwiecPL]Ja tak na prawdę rozważam już tylko 2 możliwości:

  1. własny serwer zdalny z linuksem i RoR
  2. np. heroku.com[/quote]
    …ale nie wirtualkę na lokalnej maszynie? Ech, łindołsiarze to jednak utrudnianie sobie życia mają we krwi.
1 Like

Moje doświadczenie jest takie, że prędzej czy później jak już codziennie robi w Ruby w ramach pracy to kończy się lokalną wirtualką (bo wersje systemów na produkcji, bo wersje baz danych, bibliotek systemowych, nginxow, passengerów, libmagicków i innych cudów) więc lepiej od początku pójść w stronę. Czy to będzie Vagrant (najbardziej lansowane rozwiązanie teraz chyba) czy coś innego to już twój wybór ale VM setupowany chefem od dnia 0 projektu to imho best practice, który pozwala innym developerom później szybko się włączyć do projektu.

Nie zrozumiales kompletnie mojego pytania. Jezeli piszesz program to w tym samym momencie nie bedziesz gral w call of duty. Dlatego jak juz kodujesz to o jakim przelaczaniu systemu mowimy ?

I wlasnie o nazwy tych programow pytalem. Co takiego oferuje windows czego nie mam na linux. Sam mam zainstalowanego windowsa (virtual) zebym mogl czasami w cos pograc.

Jezeli odejmiesz gry to ten warunek spelnia Linux i Mac

Czyli sprowadza sie do tego ze uzywajac linuxa bede mial zawsze o wiele mniej problemow. Interpreter bedzie dzialal szybciej i mam pewnosc ze biblioteki tworzone przez innych programistow sa kompatybilne z systemem ktorego uzywam. Nie wspomne o tych bajkach na temat zgodnosci ze sprzetem czy tych wielkich bugow na ktore kazdy trafia. W ubuntu od kilku wersji(5lat?) dziala wszystko dobrze i stabilnie

Gdybys pytal sie na forum .net jak sobie skonfigurowac srodowisko do pracy pod linuxem to tez by ci powiedzieli zebys zainstalowal windowsa. Pewnie mozesz bawic sie w osobny .net serwer ale po co ? W paru wczesniejszych postach ludzie ci to sugerowali ale caly czas opierasz swoje zdanie na doswiadczeniach sprzed paru lat

Wygrywa jako system dla programistow a nie jako system z konsola

Podsumowujac od 28 sierpnia probujesz stworzyc sobie srodowisko do pracy i caly czas nie mozesz zrozumiec ze wlasny nix’owy system to najlepsze rozwiazanie. Paradoksalnie caly czas podkreslasz jak bardzo czas jest dla ciebie wazny

Tylko, że takie projekty to rzadkość. Raz pracowałem nad aplikacją, która składała się z kilka różnych, dodatkowo oprócz postgresa był tam riak, część była w clojure, pisaliśmy trochę testów akceptacyjnych, które wymagały uruchomienia części architektury. Ale jeżeli nie używasz zbyt dużo zewnętrznych narzędzi, to w większości wypadków setup projektu sprowadza się do bundle install.

@lewy313 nie wiem po co takie docinki, przecież Owiec napisał, że nie robił nic dalej w temacie. I napisał, że jak sobie kupił laptopa, to ubuntu nie chciało współpracować. Nie wiem czy żyjemy w innej rzeczywistości, ale pomimo tego jak linux nie będzie zachwalany, to jednak czasami się potrafi mocno porozwalać i nie z każdym sprzętem będzie współpracował.

Wyczuwam tu jakąś hipokryzję :smiley:

Zrób tak - zainstaluj ubuntu natywnie, daj na to 20gb dysku, nie zaboli chyba aż tak bardzo? Jeśli wszystko pójdzie dobrze, zainstaluj railsy i ciesz się, że oszczędzasz czas. Jeśli nie, to postaw sobie vagranta, czy cokolwiek Ci pasuje jako wirtualka (chociaż vagrant pod windowsa nie ma na przykład zaimplementowanego ssh i trzeba to robic przez putty itp.) i tam odpalaj serwer etc., linię poleceń etc., a pliki edytuj na windows.

Jeśli wydaje Ci się, że drugie wyjście jest mimo wszystko lepsze, to nie rozumiem, co tu jeszcze robisz :wink: Trochę tak jakbyś pytał i czekał, aż ktoś Ci da odpowiedź, ale tylko taką jak Ci pasuje.

Ja się w takie rzeczy bawiłem i kompletnie rozwalił mnie windowsowy terminal, który moim zdaniem do niczego się nie nadaje, lepszy trochę jest ten, który dostaje się z gitem pod windowsa, ale w porównaniu z macowym / linuxowym to dalej wygląda jak prima aprilis. Jeśli Ci to odpowiada, to zrób jak Tjeden napisał i mnie nie słuchaj :). Ja nie rozumiem jak można tak pracować, ale może cenię sobie wygodę bardziej niż problem zagrania w call of duty w czasie pracy ;).

Btw. jak miałem do napisania appkę na windows phone to na macu zainstalowałem windowsa (działa zajebiście, bo możesz tego samego widnowsa odpalać natywnie i przez parallelsy) i jak pracowałem nad WM to włączałem windowsa i nie wiem co w tym tak piekielnie ciężkiego. Przełączenie to parę minut a pracujesz zwykle parę godzin.

Panowie, spokojnie. Myślę, że możemy już zakończyć temat, ponieważ odbiega już od głównego wątku. Zszedł raczej na ewangelizację linuksa, krytykę ludzi, którzy używają windowsa oraz niekonstruktywne krytykowanie dla czystego polepszenia sobie samopoczucia :slight_smile: Ciężko się także oprzeć wrażeniu, że odpowiadacie nie czytając tego co ja napisałem, a to co napisali inni tak jakbym to ja napisał o sobie :slight_smile:

Później wrzucę wniosek jak najlepiej zorganizować sobie pracę dla potomnych. Przy założeniu, że będzie się używać jednego systemu, a nie dwóch i co chwilę restartować komputer podczas pracy ( wbrew pozorom pod windowsem są też inne programy niż gry, np. nie przypominam sobie żadnego dobrego systemu księgowo-magazynowego pod linuksa jak np. Enova itp. ) oraz przy założeniu, że pracuje się nad danym projektem z dwóch różnych biur i nie chce się codziennie biegać z laptopem specjalnie dla RoR.

Ależ przesadzasz! :slight_smile: Ja linuxa niezbyt lubię i uważam, że on nie jest takim oczywistym wyborem jak niektórzy czasem sugerują, ale akurat do RoR jest to najprostsze i najbardziej optymalne rozwiązanie. W większości innych wypadków pewnie windows 7, który imho jest całkiem niezłym systemem, będzie się lepiej nadawał. Jeśli mimo wszystko chcesz kombinować pod górkę, to napieraj, może się opłaci, może nie :>

W twojej pracy rzadkość, w mojej częśtość. Żyjemy w innych bańkach.

Nie chodzi tyko o moją pracę, po wielu rozmowach z naprawdę różnymi ludźmi i przy dorabianiu przy różnych projektach mam zupełnie inny obraz - taki, który mówi, że większość projektów nie ma na tyle rozbudowanych zależności, żeby trzeba było się uciekać do maszyn wirtualnych. W ilu projektach oprócz tych, nad którymi pracujesz widziałeś taką potrzebę?

Wierzę, że w Twojej “bańce” to ma sens, ale Ty piszesz, że każdy prędzej czy później na tym skończy. Co imho jest dużym nagięciem i kiepską radą dla początkujących - według mnie trzeba stawiać na prostotę i dopóki można się obejść bez setupu poza “bundle install”, dopóty spokojnie można obejść się bez wirtualek (a nawet poza tym punktem często nie ma takiej potrzeby). Znam naprawdę sporo programistów i często wypytuję o różne szczegóły setupu projektów, nie spotkałem na razie oprócz Ciebie nikogo, dla kogo byłoby to wymogiem.

Swoją drogą fajnie by było jakbyś napisał kiedyś trochę więcej szczegółów na temat powodów takiego a nie innego setupu - znam teamy, które na developmencie korzystały z sqlite i deployowały to na postgresa, a u Ciebie słyszę, że chcesz mieć ten sam system i nginxa + passengera (nie mówiąc już o innych rzeczach).

Wszystko przebadane na życiowych przykładach:

a) w mongo w którejś wersji operator OR jest po prostu ignorowany. Wszystkim dev’om testy przechodziły, na produkcji była niższa wersja i okazało się, że query zwracają złe wyniki (nie było błędu)

b) na produkcji okazało się, że są problemy z używaniem mongrela2 (już mniejsza o to z jakich powodów, na szczęście wykryliśmy to przed migracją na serwerze stagingowym, które jest identyczną wirtualką na tym samym fizycznym serwerze)

c) do projektu potrzebowaliśmy filemagick w konkretnej wersji paczki bo w starszej był bug

d) część błędów z jakiegoś softu okazało się, że są tylko powtarzalne na konkretnych setupach w tych samych wersjach co na produkcji (to już był bardziej rozbudowany soft, chodziło bardziej o reprodukowalność konfiguracji niż aplikacji rails)

Ogólnie sytuacja wygląda tak, że pracuję nad kilkoma projektami jednocześnie, są to rzeczy używające railsów od 3.0.* do 3.2.* , postgresa, mysqla, mongo, redisa, zmq, eventmachine, unicorna, passengera, nginx i pewnie jeszcze coś o czym zapomniałem. Część z tego softu chodzi na starszych ubuntu/debianach administrowanych przez osoby, od klienta, które zarządzają szerszą infrastrukturą, część jest ogarniania przez firmę wynajętą na potrzeby jakiegoś konkretnego projektu, część jest na naszej infrastrukturze wykorzystującej serwery wirtualne. Do niektórych projektów potrzebuję mieć 4 aplikacje uruchomione, które komunikują się po sobie i stoją na różnych subdomenach. Naprawdę nie widzę sensu próbować tego ogarniać na swoim systemie. Jak chce sobie zrobić upgrade linuxa to nie chce mi się rozkminiać jaki to będzie miało wpływ na moje wszystkie projekty, po prostu chce zrobić upgrade. I nie chcę mi się myśleć jak mieć 2 różne redisy postawione bo jeden projekt ma taką wersję a drugi taką i jak używałem złej to coś nie chodziło gdzieś.

Trudno mi mówić, czy to dobra czy zła rada dla początkujących. Zależy czego pragną, szybko zacząć czy się czegoś nauczyć co może im się przydać na pewnym etapie pracy. W każdym razie VM to taki szerszy RVM :slight_smile: Nie ma się co tego bać, warto się nauczyć.