Ruby 1.9.1 i Rails 2.3.0 – małe wskazówki

Opublikował siefca wt 24 lut 2009 15:41:49 GMT

Wczoraj wieczorem zdecydowałem się trochę pocierpieć. Masochistycznego stymulanta nie trzeba było daleko szukać, bo ostatnimi czasy zainteresowałem się nowym wydaniem interpretera języka Ruby. Nie byłoby w tym nic nadzwyczajnego, gdyby nie fakt, że sam twórca języka określił tę linię jako stabilną i gotową do zastosowań produkcyjnych. Przez ponad tydzień zapoznawałem się ze zmianami w Ruby 1.9, a pomagał mi w tym Radarek, który bloguje. Przy okazji popełniłem trzy artykuły, z których pierwszy i drugi ukazały się już na łamach heise Open Source. Trzeci jest już zatwierdzony i w przyszłym tygodniu będzie opublikowany.

Najpierw sporządziłem listę potrzebnych gemów i poczytałem trochę o tym, która wersja RoR będzie kompatybilna z nowym Rubym. Padło na wydanie RC oznaczone numerem 2.3.0. Ponaglany obsesją zdążyłem przekonać się w międzyczasie, że wydanie 2.2.2 nie zadziała. W tym wpisie postaram się notować, co robię, żeby cały ten rozklekotany zestaw jakoś uruchomić, bo zdążyłem zauważyć, że nazwanie wersji 1.9.1 produkcyjną jest sporym nieporozumieniem, chyba, że mamy na myśli wykorzystywanie języka w celach edukacyjnych. Zmieniło się kilka podstawowych funkcji, z których korzystają pakiety dodające własne rozszerzenia pisane w języku C, więc większość z fajnych zabawek dostępnych w gemach po prostu nie współpracuje z Rubym 1.9.1.

Poniżej sposoby, których używałem, żeby zainstalować potrzebne rzeczy.

Ruby 1.9.1

  apt-get install libmysqlclient15-dev sqlite3 sqlite libsqlite3-dev libsqlite0-dev
  wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p0.tar.gz
  tar xvzf ruby-1.9.1-p0.tar.gz 
  cd ./ruby-1.9.1-p0
  CFLAGS="-march=native -O2 -pipe -fomit-frame-pointer"
  export CFLAGS
  ./configure --prefix=/usr/local/ruby19 --enable-pthread  \
              --enable-shared --enable-install-doc
  make
  make install

mysql-ruby 2.8.1

  wget http://rubyforge.org/frs/download.php/51087/mysql-ruby-2.8.1.tar.gz
  tar xvzf mysql-ruby-2.8.1.tar.gz 
  cd ./mysql-ruby-2.8.1
  ruby extconf.rb
  make
  make install

W przypadku Mac OS-a X i MySQL zainstalowanego finkiem:

  wget http://rubyforge.org/frs/download.php/51087/mysql-ruby-2.8.1.tar.gz
  tar xvzf mysql-ruby-2.8.1.tar.gz 
  cd ./mysql-ruby-2.8.1
  ruby extconf.rb --with-mysql-dir=/sw/bin/mysql \
    --with-mysql-include=/sw/include/mysql \
    --with-mysql-lib=/sw/lib/mysql \
    --with-mysql-config=/sw/bin/mysql_config
  make
  make install

Thin

  cd /usr/bin
  ln -s /usr/local/ruby19/bin/ruby ./ruby19
  ln -s /usr/local/ruby19/bin/gem ./gem19
  ln -s /usr/local/ruby19/bin/rake ./rake
  PATH="/usr/local/ruby19/bin:$PATH"
  export PATH
  gem install rack
  gem install eventmachine
  git clone git://github.com/macournoyer/thin.git
  cd ./thin
  rake install || cd pkg && gem install ./thin-*.gem --no-rdoc

Hpricot

  gem install why-hpricot --source http://gems.github.com

Rails 2.3.0

  gem install rails --source http://gems.rubyonrails.org

Vlad 1.2.0

  gem install open4
  gem install siefca-vlad --source http://gems.github.com

Podziel się

Trackbacki

Użyj następującego trackbacka na swojej stronie:

http://randomseed.pl/trackbacks?article_id=ruby-1-9-1-i-rails-2-3-0-%E2%80%93-ma%C5%82e-wskazowki&day=24&month=02&year=2009

Komentarze

  1. Kefas powiedział about 1 month later:

    Czytam twoje artykuły na temat Ruby i bardzo się zainteresowałem tym językiem. Tylko teraz stoję w miejscu, bo mam już mętlik w głowie czy uczyć się Pythona czy może Ruby. Próbowałeś Pythona?Jeżeli tak to zapewne wybierając Ruby musiało Ci coś nie pasować w Pythonie:). Mógłbym wiedzieć co to było?Jak jest z szybkością Ruby/Rails?Cały czas są daleko od Pythona?

  2. siefca powiedział about 1 month later:

    Python i Ruby są podobne. Niestety w Pythonie programowałem w sumie przez 3–4 tygodnie, więc po prostu zapoznałem się z językiem nie odkrywając w pełni jego możliwości. W stosunku do Ruby’ego denerwowała mnie w nim częstotliwość z jaką musiałem używać odwołania do obiektu bieżącego (self).

    Wydajność nie ma dla mnie tak wielkiego znaczenia, bo pisałem w ANSI C, bardzo wydajnym języku, ale patrząc z perspektywy czasu, to mi się nie opłacało. Dlaczego? Bo zamiast robić coś ciekawego korespondowałem z autorami programów, które poprawiałem i dyskutowałem podwójne void-pointery czy debuggowałem dlaczego od godziny robi mi się segfault. Więc, gdyby wydajność była dla mnie bardzo ważna, to bym pisał w C, ale wtedy nie miał bym czasu na nic innego. Stąd, jako istota wyposażona w mechanizm zwany generalizacją wytworzyłem sobie pomocniczy wzorzec pt. “nie przejmuj się wydajnością, bo i tak za parę lat to wszystko będzie się wykonywało na kilkukrotnie szybszym sprzęcie”.

    Gdybym miał robić serwis oparty o jakiś dynamiczny język, to o wydajności bym pomyślał. Przy czym dużo zależy tu od architektury. Na przykład Ruby nie ma jeszcze pełnej i wygodnej wątkowości, ale nic nie przeszkadza uruchomić kilka wątków na przykład Thina i gadać do nich z Nginxa. Będzie to pewnie wydajniejsze niż FCGI czy nawet mod_passenger.

    Tutaj jest próba zmierzenia wydajności samego języka i porównania z Pythonem, która już może być nieaktualna, bo pojawiają się co rusz nowe maszyny wirtualne i mechanizmy JIT; na przykład LLVM dla CPythona a także dla MacRuby’ego. To będzie się jeszcze rozwijało, bo nad wydajnością tych języków ludzie tak intensywnie wcześniej nie pracowali. W przypadku Railsów z kolei ma być mała rewolucja w postaci włączenia całego rdzenia z projektu Merb, który jest oszczędniejszy i szybszy.

    Po kilku miesiącach zabawy z Rubym zauważyłem, że lepiej rozumiem też przykłady pisane w Pythonie. Dlatego napisałem na początku, że te języki są podobne. Nie mam więc takiego dylematu, że “obrałem złą drogę” – języki te mają tyle wspólnych założeń, że nie czuję, abym się oddalał od możliwości nauczenia się Pythona, a wręcz przeciwnie. Problemem z czasem może być za to konkretny framework do Weba, bo tam nie chodzi już o podejście, ale o zapamiętywanie pewnych wzorców, których potem się używa.

    O wyborze Ruby’ego zdecydowało też u mnie community, szczególnie szacunek do swojej pracy i swojego czasu. Zaimponowały mi przykłady firm, w których w związku ze skróceniem czasu potrzebnego na wykonanie projektu skraca się liczbę dni, które trzeba w tygodniu przepracować, a nie bierze się nowych zadań, żeby wypełnić czas wolny.

(leave url/email »)

   Pomoc języka formatowania Obejrzyj komentarz