RoRDevToolkit

Witam :wink:

Natchniony ostatnimi burzliwymi wątkami nt. systemów operacyjnych i edytorów (niektórych dumnie nazywanych IDE :wink: ) a także po przemyśleniu, co zajmowało dużo czasu w moim ostatnim projekcie (częste aarie sprzętu u znajomego powodowały, że reinstalacje i stawianie środowiska developerskiego trwało długo - o wielu drobiazgach trzeba było po prostu pamiętać) postanowiłem zainicjować mały projekt, który w przyszłości przerodzi się w coś przydatnego dla developerów.

Zadaniem tworzonego skryptu jest dostarczenie zadań Rake służących preinstalacji i prekonfiguracji własnego środowiska developerskiego. Elementy przezeń instalowane nie mają być odgórnie narzucane - możliwa powinna być rekonfiguracja listy dostępnych pakietów i pakietów instalowanych domyslnie. Powinien być jak najbardziej niezależny od dystrybucji. Niestety instalacja pakietów w systemie linuksowych jest przeprowadzana za pomocą różnych aplikacji, a nazwy pakietów również się mogą różnić.
Z gemami jest nieco lepiej, ale niektóre z nich wymagają plików nagłówkowych (np. postgres-devel, któremu w dodatku w pliku źródłowym nalezy zmienić jedną linijkę, bo gem się nie skompiluje).
O wielu drobiazgach należy pamiętać.

Czyż nie piękne by było postawienie serwera bazy danych gotowego do użycia w ruby on rails za pomocą jednej komendy:

rake postgres:all

Żeby nie być gołosłownym: założyłem repo (pisałem w innym poście już o tym) i umiesciłem zalązek aplikacji.

REPO: http://github.com/sevos/rordevtoolkit/tree/master

git clone git://github.com/sevos/rordevtoolkit.git

Pozwala póki co na niewiele:

  • instalacja ViMa i pluginów z repozytoriów akitaonrails + NERDSnippets + FuzzyFinderFile skonfigurowany żeby jak najbardziej przypominał textmateowy (tworzy kopię biezacej konfibguracji VIM)
  • instalacja serwera bazy danych firebird2.1-super + pobieranie z repo, kompilowanie i instalowanie gemów ze sterownikiem i adapterem ActiveRecord
  • instalacja kilku, przydatnych wg mnie gemów (niektóre to takie metagemy)

Obecnie skrypt wspiera Fedorę (przetestowano) i Ubuntu (nie przetestowano - nie wiem, czy dobrze zapamiętałem nazwy pakietów z firebirdem). W przyszłości planuję dodać bashowy skrypt instalujący ruby z repozytorium i doinstalowujący rake’a z gemów.

Chętnych chciałbym zaprosić do współpracy. Chętnie przyjmę wszelkie uwagi. Przydałoby się przygotować taski z instalacją emacsa.

Za zgłoszony bład dziękuje asokowi

Potrzebuję małej pomocy.
Przygotowuję w moim skrypcie instalację serwera postgresql.
Obecnie potrafi zainstalować go z paczek, zainicjować w fedorze klaster (w ubuntu nie jest to potrzebne), zmienić hasło użytkownika postgres, ZAAPLIKOWAĆ PATCH na źródła klienta tak, aby ruby-postgres się kompilował (postępowałem zgodnie z instrukcjami drugiego postu w tym wątku: http://www.ruby-forum.com/topic/177934 ) oraz zainstalowac odpowiednie gemy.

Chciałbym, aby ktoś, kto używa ubuntu i nie ma jeszcze zainstalowanego postgresa spróbował go zainstalować w całości przy użyciu polecenia

rake postgres:all

Szczególnie prosiłbym o zwrócenie uwagi na to, czy patch się prawidłowo aplikuje. Obawiam się, że mam nieprawidłowo napisany plik patcha, w ubuntu o ile pamiętam poprawiana linijka w pliku libpq-fe.h jest jakieś 100 linii dalej:

[code]518c518
< extern char *pg_encoding_to_char(int encoding);

extern const char *pg_encoding_to_char(int encoding);[/code]

Rany, po cholerę patch na ruby-postgres?

patch na libpq-fe.h z postgres-devel… pod łubudu i fedorą wysypywała się kompilacja native extensions, po tym patchu jest ok.

sevos: Ja używam gema pg - czy to przypadkiem nie jest ten zalecany do pracy z postgresem?

Dzieki za informację :slight_smile: Też mi się nie chcialo wierzyć, że patchować trzeba :wink: Poprawiłem w skrypcie. Obecnie skrypt jest w stanie zainstalować server PostgreSQL na Fedorze i Ubuntu (przeprowadza po kolei przez instalacje servera, zmianę hasła, aktywowanie połaczeń lokalnych, instalację gemów).

W międzyczasie poprawiłem trochę konfigurację instalcji gVIM’a i firebirda.

Zapraszam do testowania, pomysłów na dodatkowe funkcje.

Używasz firebirda? :slight_smile:

Nie ma sprawy. Config do vima bardzo się przydał. Wogóle możliwość zainstalowania vim + wszystkie potrzebne pluginy do railsów za pomocą jednej komendy to bardzo dobry pomysł.

Zainstalowania i późniejszych upgrade’ów owych pluginów. To będzie coś :wink:

Swoją drogą na twitterze wyczaiłem, że rubymine będzie miało uzupełnianie plików features krokami, które są zdefiniowane: http://twitter.com/aslak_hellesoy/status/3590958484
Niech ktoś skrobnie taki plugin do vima :wink:

Używasz firebirda? :)[/quote]
Tak, dzięki za wyrazy współczucia - ostatnio gdzies cyztałem, że kursory nie działają prawidłowo w firebirdzie 2.1 ;]. To ogólna porażka. Tak samo jak wybór javy do projektu. Teraz się męczymy. Podpinam ActiveRecord do czego się da w tej bazie i railsami próbuje generowac raporty.

Config nie jest do końca dobry. Ładnie działa pod gVim natomiast przy uruchamianiu wersji konsolowej sypie trochę błedami. Jak znajdę więcej czasu to spróbuję rozgryźć składnię vimrc.
Chciałbym uczynić gVima bardziej ludzkim ( write na przykład ;)). Nie każdy lubi styl modliszki, ale każdy może polubić Vima. Jakby jakiś faj emacsa się znalazł to zapraszam.

Co do uaktualnień.
Zrobiłem spory błąd, który będe musiał naprawic: z katalogów files/vim/vimfiles i files/vim/vimfiles/snippets usunąłem podkatalogi .git (usuwając powiązania z repozytoriami zewnętrznymi). Nie wiem czmeu nie ściągały się one razem z clonem z mojego repozytorium… O czymś nie wiem. Zanim usunąłem te podkatalogi to na githubie były te katalogi pokazywane jako zewnętrzne.

Zainstalowałem maszynę wirtualną z ubuntu, więc dzięki snapshotom będe mógł testowac skrypt na czystych instalacjach systemu.

Zainstalowałem na swojej maszynie Ubi 9.04 Cucumbera … w skrypcie brakuje dla Ubuntu dwóch systemowych paczek …
doinstalowałem:

 sudo apt-get install libxslt1-dev libxml2-dev

instalacja gem-u zależnego Nokogiri nie powiodła się… po dograniu powyższych paczek również Cucumber instaluje się poprzez jedno wywołanie skryptu z parametrem :smiley:

Gratuluje pomysłu na narzędzie… przypomina mi stare dobre czasy DOS-a i plików *.bat z MENU :smiley: … nie uwłaczając potędze Rubiego

Poprawione.

Mam inny problem. Znalazłem nowego fuzzyfindera dla VIM:
https://bitbucket.org/ns9tks/vim-fuzzyfinder
ale zwyczajnie pod gvim nie działa. Pod VIM działa. Gdy gVim odpalam komendą

LANG="en" gvim

to również nie dostaję błedu:

Wykryto błąd podczas przetwarzania function fuf#onComplete…12…25…fuf#filterMa
tchesAndMapToSetRanks…fuf#setRanks…12_evaluateMatchingRate:
wiersz 2:
E806: Użycie Zmiennoprzecinkowej jako Łańcucha[/code]
Miałem nadzieję, że będzie działac zarówno pod vim jak i gvim, ale niestety …

Chciałem Was poinformować o nowościach w rordevtoolkicie :slight_smile:
Obecnie GŁÓWNIE wspierane jest Ubuntu 9.04 (i pewnie 9.10, gdy wyjdzie).
Podstawowa funkcjonalność skryptu po każdym pushu jest testowana na czystej instalacji Ubuntu na VirtualBox.

Najważniejsza nowością jest skrypt do podstawowej instalacji ruby w ubuntu: ruby ruby-dev irb. Dopisuje też bieżącemu użytkowi i rootowi katalog /var/lib/gems/1.8/bin do ścieżki, dzięki czemu aplikacje takie jak rake, rails, mongrel mogą być uruchamiane bez podawania pełnej ściezki.

Sposób użycia w ubuntu:

$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install git-core $ git clone git://github.com/sevos/rordevtoolkit.git $ cd rordevtoolkit $ sh ubuntu.sh
Zainstaluje się ruby, irb, zaktualizują się rubygemy do 1.3.5 (w systemach debianowych trzeba namieszać nieco, żeby zadziałało)

Zrobiłem coś takiego jak metapakiety. Mam obecnie dwa:

  • meta:development_studio - środowisko dla programisty (VIM z kolorkami, postgres, railsy, mongrel, haml i kilka innych) - instalacja może potrwac nawet 15 minut! (RDoci railsów trochę sie generuną)
  • meta:testing_studio - środowisko testowe. Ściąga i instaluje JRuby (w /opt), instaluje w nim Celerity. Później już normalnie instaluje Culerity i Cucumbera. Dodatkowo Webrat, RSpec i ZenTest. Dzięki temu mamy komplet testów BDD :slight_smile:
    (muszę chyba jeszcze dorzucić Populatora, Fakera i/lub Factory girl)

aby zobaczyć poglądową listę rzeczy instalowanych przez metapakiet:
piszemy np. dla developerskiego:

rake meta:development_studio:list

Aby zainstalowac pakiet:

rake meta:development_studio:install

Przetestowane na czystej instalacji ubuntu.

Należy uruchomić pgogram pgadmin3 i dodać nową rolę dla naszych projektów railsowych (rola powinna móc tworzyć bazy danych :wink: )

Może opcja “poproszenia skryptu” o dopisanie --no-rdoc --no-ri do gem install? :slight_smile:

Coraz bardziej mi się podobają możliwości tego projektu.

A gdybyś zrobił jakiś frontend (curses?), w którym możnaby zaznaczyć które komponenty są do zainstalowania (z reguły na maszynę/projekt wystarcza jedna baza), to już w ogóle byłoby miodnie. Właśnie, chętnie nauczę się ruby-ncurses :slight_smile:

Dla mnie - jak znalazł. Właśnie mam przygotować stanowiska developerskie dla moich studentów w nowej pracowni :slight_smile:

Może opcja “poproszenia skryptu” o dopisanie --no-rdoc --no-ri do gem install? :)[/quote]
No z załozenia to miało być proste w stylu: odpal i idź na kawę.

To się cieszę, że komuś jeszcze się może przydać. Narzędzie robione jest na szybko, zastanawiam się nad przebudowaniem. Myślę, że zbędna jest tak duża ilość tasków związanych z instalacją gemów. Możnaby zrobić metagemy do najważniejszych rzeczy (jak obecnie cucumber). Jak ktoś chce jeden konkretny gem, to ma rączki i wpisac gem install potrafi.

Apohllo, a nie dałoby jakiegoś studenta zatrudnić do uporządkowania konfiguracji GVima? Obecnie to co jest działa tylko na GVimie i psuje płynność startu konsolowego VIMa. Trzeba zebrać do kupy jeszcze raz pluginy i je poinstalowac na czystej konfiguracji GVima/VIMa. (dajmy na to - jest nowy FuzzyFinder ale z konfiguracją akity się gryzie). A tak na serio to dobrze by było zrobić porządek, bo teraz jest to nieestetyczne :).

Domyślnie metapakiet developerski insrtaluje postgresa - firebird był ze względu na jeden projekt, który robiliśmy w firmie.

Zgłaszasz się na ochotnika? :slight_smile:
Aby móc zrobić elastyczną nakładkę, ten kod wymaga obecnie refaktoryzacji.
Wydzielić powinienem namespace modules który by instalował takie mniejsze części w stylu vim/postgres. Zastanawiam się, czy nie zejść z dużej ilości zadań rake i nie zmienić formatu na np. taki:

 rake module:install postgresql

Musze tylko obadać przyjmowanie parametrów dodatkowych praez taski rake’a.

Po prostu utrzymywanie tego w obecnej formie jest dośc uciążliwe. Zastanawiam się, cyz każdego modułu większego nie zamknąć w obiecie i przy instalacji na konkretnej dystrybucji szukać odpowiedniej metody np. install_ubuntu, install_fedora. Po prostu w tej chwili informacje o krokach instalacyjnych trzymane są w dwóch miejscach: część w config/packages.yml a część w taskach rakeowych (ze względu np. na nietypowy sposób instalacji).

Gdy kod będzie uporządkowany to można napisać nakładkę graficzną

Studentów to póki co będę angażował do dalszego tłumaczenia Rails Guides - wątpię, żeby ktoś był na tyle oblatany w Vimie. Już prędzej sam się za to zabiorę :slight_smile:

Hej wszystkim,

W nocy zrobiłem obiecaną przebudowę :slight_smile: Zmiany w kodzie są olbrzymie, użyłem swojej magicznej tablicy i nawet troche porysowałem ;).

Do rzeczy. Co się zmieniło?

  • diametralna przebudowa systemu tasków. Niech żyją bloki! Przykład dwóch tasków:

[code=ruby]installation_unit “vim”,
description => “Install GVim with plugins and gems” do |i|
i.install_system_package “vim”
i.execute_unit “vim-configuration”
i.install_gem “vim-ruby”
end

installation_unit “vim-configuration”,
:description => “Install configuration for ViM dedicated to Rails-developers” do |i|
i.step “Make a backup if nesessary” do|s,i|
if File.exists? “#{home_path}/.vim”
s.warning “WARNING: #{home_path}/.vim directory exists, making backup in #{home_path}/.vim.bak”
s.rm("#{home_path}/.vim.bak", :recursive => true) if File.exists? “#{home_path}/.vim.bak”
s.run “mv #{home_path}/.vim #{home_path}/.vim.bak”
end
if File.exists? “#{home_path}/.vimrc”
s.warning “WARNING: #{home_path}/.vimrc file exists, making backup in #{home_path}/.vimrc.bak”
s.rm("#{home_path}/.vimrc.bak", :recursive => true) if File.exists? “#{home_path}/.vimrc.bak”
s.run “mv #{home_path}/.vimrc #{home_path}/.vimrc.bak”
end
end
i.step “Unpack plugins” do |s,i|
s.run “tar xf files/vim/vimfiles.tar.gz -C #{home_path}”
s.mv “#{home_path}/vimfiles”, “#{home_path}/.vim”
end
i.step “Copy config file” do |s,i|
s.cp “files/vim/vimrc”, “#{home_path}/.vimrc”
end
end[/code]

  • wykonywanie całych zadań jak i pojedyńczych kroków w zależności od dystrybucji, np:

[code]installation_unit “sun_jre”, :supported => :fedora do |i|
i.step “Information” do |s,i|
s.warning “Installation Sun JRE in Fedora is not supported yet”
s.warning “Please check if you have installed JRE externally”
s.warning “And press Enter”
s.pause
end
end

installation_unit “sun_jre”, :supported => :ubuntu do |i|
i.install_system_package “sun-java6-jre”
end[/code]

  • autogenerowanie planów zadań. można odpalić zadanie z opcją plan (zamiast install) i wypisze siię bardziej lub mniej ładny plan zadania: przykładowy plan zadania:

[code]rake module:vim:plan
(in /home/sevos/devRoR)
** Plan of module:vim:install

  • Install vim-enhanced, vim-X11, ctags into system
  • Execute unit -> module:vim-configuration:install
    ** Plan of module:vim-configuration:install
  • Make a backup if nesessary
  • Unpack plugins
  • Copy config file
    ** End of plan of module:vim-configuration:install
  • Install vim-ruby gem
    ** End of plan of module:vim:install[/code]
  • logiczny typ zadań typu meta (moduł reprezentuje pojedyńcza aplikację, funkcję)

Niedługo wprowadzę możliwość blokowania instalacji dokumentacji gemów.

Zapraszam do komentowania :wink:

Re-we-la-cja :slight_smile:
Teraz obok rozbudowy można zasuwać frontend.
Możesz też wypisać np. wszystkie supportowane dla danego distro taski?

Wyświetlają się tylko taski i stepy supportowane dla distro, na którym obecnie pracujesz.

rake -T

linijka 21 lib/installation_unit.rb

# register unit on the list @@INSTALLATION_UNITS[@type][@name] = self if supported?
Potem z tej listy generowane są taski.

Edit: zastanawiam się jak przekazywać zestaw FLAG do tasków rake’a.
Albo przez args,albo przez ENV, jakieś inne opcje?

Edit2:
Dodałem support dla zmiennej środowiskowej RDT_OPTS będzie tam można przekazywac różne flagi.
Obecnie w tej zmiennej poszukiwane sa flagi --no-ri i --no-rdoc i przekazywane do każdego polecenia wywołującego instalacje gemów w wykonywanym tasku

Przykład:

RDT_OPTS="--no-ri --no-rdoc" rake module:rubygems:install