Kilka wersji Railsów w systemie

Ponieważ do tej pory standardem RoR była wersja 1.2.3 i wszystkie książki są oparte na tej wersji, pojawiają się problemy wraz z nowymi (1.2.4-1.2.6) wersjami railsów. Oto krótki poradnik jak sobie poradzić z różnymi wersjami railsów w jednym systemie.

Pierwsza sprawa to zarządzanie gemem railsów. By wylistować wszystkie wersje gema rails wpisujemy ($ to znak zachęty, nie przepisujemy go):

[quote]$ gem list rails

*** LOCAL GEMS ***

rails (1.2.6, 1.2.5, 1.2.3)[/quote]
Mam zatem 3 wersje RoR: 1.2.3, 1.2.5, 1.2.6.

Gdy zainstalujemy railsy poprzez:

w naszym systemi będzie dostępna najnowsza wersja railsów. Jednakże możemy mieć potrzebę zainstalować starszą wersję (np. 1.2.3), robimy to w następujący sposób:

Gdy tworzymy szkielet aplikacji poprzez:

zostanie użyta najnowsza wersja railsów. Jeśli chcemy tworzyć naszą aplikację za pomocą starszej wersji (którą oczywiście wcześniej zainstalowaliśmy) rails, musimy wyspecyfikować to w następujący sposób (jest to raczej mało znany trick :)):

Aby być pewnym, że została użyta właściwa wersja gem możemy wpisać:

[quote]$ rails -v
Rails 1.2.6
$ rails 1.2.3 -v
Rails 1.2.3[/quote]
Jest to dosyć ważne, by użyć dobrej wersji już na poziomie generowania szkielietu, gdyż może się różnić (i tak właśnie jest!).

Jeśli wszystko poszło dobrze, w pliku config/environment.rb powinniśmy mieć wpis:

RAILS_GEM_VERSION = '1.2.3' unless defined? RAILS_GEM_VERSION

Ważne jest by była ustawiana ta wersja gema, którą wyspecyfikowaliśmy wcześniej poprzez parametr 1.2.3.

gdy używam komendy rails _1.2.3_ moj_projekt
tworzą się 2 projekty… jeden pod nazwą 1.2.3 a jeden moj_projekt, co jest nie tak? W enviroment.rb wyswietla rails 2.1.0 zamiast 1.2.3 mam zainstalowane obie wersje railsów

Nieprawda, bo działa poprawnie. ;p

Może napisz jaką masz wersję ruby i rubygems, no i jaki to OS.
Ja sprawdzałem z Ubuntu 8.10, ruby ee i gems 1.3.1, i na Debianie Lenny z tym samym zestawem - jest ok.

Ubuntu 8.10 rubygems 1.3.1 ruby 1.8.7 railsy 1.2.3 i 2.1.0 i nie stety nie odpala ;d

blazej@blazej-desktop:~/ruby$ rails _1.2.3_ moj_projekt create create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create config/initializers create db create doc create lib create lib/tasks create log create public/images create public/javascripts create public/stylesheets create script/performance create script/process create test/fixtures create test/functional create test/integration create test/unit create vendor create vendor/plugins create tmp/sessions create tmp/sockets create tmp/cache create tmp/pids create Rakefile create README create app/controllers/application.rb create app/helpers/application_helper.rb create test/test_helper.rb create config/database.yml create config/routes.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/new_rails_defaults.rb create config/boot.rb create config/environment.rb create config/environments/production.rb create config/environments/development.rb create config/environments/test.rb create script/about create script/console create script/dbconsole create script/destroy create script/generate create script/performance/benchmarker create script/performance/profiler create script/performance/request create script/process/reaper create script/process/spawner create script/process/inspector create script/runner create script/server create script/plugin create public/dispatch.rb create public/dispatch.cgi create public/dispatch.fcgi create public/404.html create public/422.html create public/500.html create public/index.html create public/favicon.ico create public/robots.txt create public/images/rails.png create public/javascripts/prototype.js create public/javascripts/effects.js create public/javascripts/dragdrop.js create public/javascripts/controls.js create public/javascripts/application.js create doc/README_FOR_APP create log/server.log create log/production.log create log/development.log create log/test.log create create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create config/initializers create db create doc create lib create lib/tasks create log create public/images create public/javascripts create public/stylesheets create script/performance create script/process create test/fixtures create test/functional create test/integration create test/unit create vendor create vendor/plugins create tmp/sessions create tmp/sockets create tmp/cache create tmp/pids create Rakefile create README create app/controllers/application.rb create app/helpers/application_helper.rb create test/test_helper.rb create config/database.yml create config/routes.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/new_rails_defaults.rb create config/boot.rb create config/environment.rb create config/environments/production.rb create config/environments/development.rb create config/environments/test.rb create script/about create script/console create script/dbconsole create script/destroy create script/generate create script/performance/benchmarker create script/performance/profiler create script/performance/request create script/process/reaper create script/process/spawner create script/process/inspector create script/runner create script/server create script/plugin create public/dispatch.rb create public/dispatch.cgi create public/dispatch.fcgi create public/404.html create public/422.html create public/500.html create public/index.html create public/favicon.ico create public/robots.txt create public/images/rails.png create public/javascripts/prototype.js create public/javascripts/effects.js create public/javascripts/dragdrop.js create public/javascripts/controls.js create public/javascripts/application.js create doc/README_FOR_APP create log/server.log create log/production.log create log/development.log create log/test.log
powstały dwa foldery oparte na ror 2.1.0

2.1.0 masz z paczek Ubuntu zainstalowane? Ewentualnie masz wersję paczkową railsów i obok niej gemy - stąd problem.
Wersja paczkowa umieszcza w ścieżce nie wrapper, ale “docelowy” skrypt generatora aplikacji.
Jak nie lubię robić smiernika z systemu instalując coś poza menadżerem pakietów, tak tutaj nie ma innego wyjścia - przynajmniej póki Debian/Ubuntu nie dorobią się jakiegoś odpowiednika dh_perl dla gemów.

Usunąłem z systemu wszystko, ruby, rubygemy railsy i zainstalowalem na nowo tak jak jest w tutorialu na rubyonrails.pl. Wszystko niby ok, oprócz:

[code]blazej@blazej-desktop:~/ruby$ rails projekt
Program rails nie jest obecnie zainstalowany. Można go zainstalować wpisując:
sudo apt-get install rails
bash: rails: polecenie nieodnalezione
blazej@blazej-desktop:~/ruby$ gem list rails

*** LOCAL GEMS ***

rails (2.2.2, 1.2.3)
blazej@blazej-desktop:~/ruby$ rails 1.2.3 moj_projekt
Program rails nie jest obecnie zainstalowany. Można go zainstalować wpisując:
sudo apt-get install rails
bash: rails: polecenie nieodnalezione
blazej@blazej-desktop:~/ruby$[/code]
Wtf?

Nie masz w PATH gemów. Wykonaj “gem environment” i dodaj na stałe do PATH to co dostaniesz w EXECUTABLE DIRECTORY

blazej@blazej-desktop:~/Pulpit/rubygems-1.3.0$ gem install rails /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- zlib (LoadError) from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/package.rb:10 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/format.rb:9 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/installer.rb:11 ... 11 levels... from /usr/local/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:104:in `process_args' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:75:in `run' from /usr/local/lib/ruby/site_ruby/1.8/rubygems/gem_runner.rb:39:in `run' from /usr/local/bin/gem:24
Odinstalowałem to, co miałem i zainstalowałem ponownie rubiego wg. instrukcji zawartej na rubyonrails.pl i ominąłem repozytoria :stuck_out_tongue: gdy doszło do konieczności wpisania tej komendy w dalszej części instrukcji wyskakuje takie coś ;(

Zasada numer 1 używania wszystkich dystrybucji pakietowych - jeśli tylko możesz, nie śmieć w /usr/local/bin, a jeśli już coś sam kompilujesz, to staraj się robić z tego paczki.

Co do problemów z rubygems i okolicami - moja propozycja:

  • wywal to co wrzuciłeś do /usr/local (tylko uważaj, żeby nie przesadzić).
  • z http://www.rubyenterpriseedition.com/download.html ściągnij sobie deba dla Ubuntu z Ruby Enterprise 1.6 i zainstaluj (nie szkodzi, że dla 8.04, dla 8.10 też działa)
  • dodaj do ~/.bashrc: export PATH=/opt/ruby-enterprise/bin:${PATH} i wykonaj source ~/.bashrc albo po prostu otwórz nowe okienko terminala
  • gem install rails -v=1.2.3
  • gem install rails -v=2.2.2

A dalej to już z górki.

wszystko pięknie i gładko, ale nie chcę namieszać a do końca na 100% nie jestem pewien, co zrobilem
dodałem do bashrc to, co mi polecono, podam tylko początek dla pewności, czy dobrze zrobiłem

[code]# ~/.bashrc: executed by bash(1) for non-login shells.

see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)

for examples

If not running interactively, don’t do anything

[ -z “$PS1” ] && return

don’t put duplicate lines in the history. See bash(1) for more options

don’t overwrite GNU Midnight Commander’s setting of `ignorespace’.

export PATH=/opt/ruby-enterprise/bin:${PATH}
export HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups

… or force ignoredups and ignorespace

export HISTCONTROL=ignoreboth

append to the history file, don’t overwrite it[/code]

nie wiem dokładnie co zawierała paczka enterprise’a, tylko ruby bez rubygemsów? (sorry za to pytanie ale nie chce naśmiecić)

[code]blazej@blazej-desktop:~$ gem install rails -v=1.2.3
Program ‘gem’ można odnaleźć w następujących pakietach:

  • rubygems1.8
  • rubygems1.9
    Proszę spróbować: sudo apt-get install
    bash: gem: polecenie nieodnalezione[/code]
    Czyli trzeba teraz zainstalować ruby gemy? Zrobić to z repozytorium, czy ściągnąć gemy stąd: http://rubyforge.org/frs/?group_id=126 i odpalić setup.rb?
    Edit:

blazej@blazej-desktop:~$ ruby -v Program ruby nie jest obecnie zainstalowany. Można go zainstalować wpisując: sudo apt-get install ruby bash: ruby: polecenie nieodnalezione
To co ja w końcu zainstalowałem? Po co jest ten ruby enterprise? :wink:

Pakiet dla Ubuntu z ruby-enterprise zawiera interpreter (podobno jakoś “podrasowany”, ale szczerze mówiąc nie zauważyłem jakiejkolwiek różnicy) + rubygems + kilka preinstalowanych gemów.
Jak to zainstalujesz, to nie potrzebujesz instalować ani kompilować żadnych dodatków.

bashrc jest poprawne, chyba że gdzieś poniżej, w częsci wyciętej, masz ustawianie innej zawartości PATH. Sprawdź co zwraca ‘echo $PATH’ z shella - jeśli ne będzie /opt/ruby-enterprise/bin to albo coś nadpisuje PATH, albo z jakiegoś powodu shell nie czyta przy starcie .bashrc (powodów może być wiele - poszukaj sobie jakiegoś opisu konfiguracji basha w necie, gdzie to będzie objaśnione).

No i zawsze możesz sprawdzić komendy /czy aby napewno się zainstalowały ;)/ podając pełną scieżkę - /opt/ruby-enterprise/bin/gem /opt/ruby-enterprise/bin/rails /opt/ruby-enterprise/bin/irb itd itb

Co do zawartości pakietu:
underley@metatron:~:$ dpkg -L ruby-enterprise
[…]
/opt/ruby-enterprise/bin/gem
/opt/ruby-enterprise/bin/passenger-stress-test
/opt/ruby-enterprise/bin/ree-version
/opt/ruby-enterprise/bin/rackup
/opt/ruby-enterprise/bin/passenger-make-enterprisey
/opt/ruby-enterprise/bin/passenger-install-apache2-module
/opt/ruby-enterprise/bin/passenger-memory-stats
/opt/ruby-enterprise/bin/irb
/opt/ruby-enterprise/bin/erb
/opt/ruby-enterprise/bin/passenger-status
/opt/ruby-enterprise/bin/rails
/opt/ruby-enterprise/bin/rdoc
/opt/ruby-enterprise/bin/passenger-spawn-server
/opt/ruby-enterprise/bin/passenger-config
/opt/ruby-enterprise/bin/rake
/opt/ruby-enterprise/bin/testrb
/opt/ruby-enterprise/bin/ri
/opt/ruby-enterprise/bin/ruby

Where would you like to install Ruby Enterprise Edition to?

mimo podanej ścieżki pod koniec instalacji wyskakuje błąd

/bin/bash ./libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I./src -I./src -DNO_TCMALLOC_SAMPLES -pthread -DNDEBUG -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -c -o libtcmalloc_minimal_la-internal_logging.lo `test -f 'src/internal_logging.cc' || echo './'`src/internal_logging.cc libtool: ignoring unknown tag CXX mkdir .libs g++ -DHAVE_CONFIG_H -I. -I. -I./src -I./src -DNO_TCMALLOC_SAMPLES -pthread -DNDEBUG -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -c src/internal_logging.cc -fPIC -DPIC -o .libs/libtcmalloc_minimal_la-internal_logging.o ./libtool: line 1281: g++: command not found make: *** [libtcmalloc_minimal_la-internal_logging.lo] Błąd 1
błąd w podanej ścieżce? Podałem /home/blazej
REE nie zainstalował się wcale tylko skonfigował i zakończył prace

Litości - czy Ty chcesz udowodnić, że cytat w twojej własnej sygnaturce jest prawdziwy?

“z http://www.rubyenterpriseedition.com/download.html ściągnij sobie deba dla Ubuntu z Ruby Enterprise 1.6 i zainstaluj (nie szkodzi, że dla 8.04, dla 8.10 też działa)”
Która część jest niejasna?

Łopatologicznie - wchodzisz na stronę, przewijasz trochę w dół, klikasz na “Version 1.8.6-20090201 for Ubuntu 8.04”, przeglądarka zaproponuje instalacje pakietu za pomocą instalatora GDebi (o ile czegoś nie zepsułeś w systemie - jesli zepsułeś, to szukaj na forum Ubuntu jak się deby instaluje). Dostajesz zainstalowany pakiet w którym jest kompletne środowisko. Instalator o nic nie pyta. nic nie kompiluje, nie wyczynia żadnych cudów. Po prostu instaluje w /opt/ruby-enterprise gotowe binarki/skrypty/liby/itp. Jak ustawisz poprawnie ścieżki (zmienna środowiskowa PATH) to wszystko zadziała od kopa. Całość zajmuje bez ściągania pakietu jakąś minutę.

tak, pewnie jest, zaraz zmienie ludzka na MOJA :slight_smile: ściągnałem deba i zainstalowałem zaraz po moim poście i nie zdążyłem napisać, że mi sie udało :stuck_out_tongue: Dziękuje za Twą pomoc, dzisiejszego dnia byłem dość rozkojarzony, ponieważ miałem mase zadania na jutro ;p
Z tą łopatologią trochę komicznie szczególnie “(o ile czegoś nie zepsułeś w systemie -jesli zepsułeś, to szukaj na forum Ubuntu jak się deby instaluje)” Rozumiem, ze dla Ciebie rzeczy o które pytałem były banalne, w tym momencie dla mnie też są :slight_smile: Az tak źle ze mną nie jest, by nie wiedzieć jak deby zainstalować, ale wszystkiego można się po mnie spodziewać ;S Wszystko śmiga, dzięki :slight_smile: