Article View: pl.comp.lang.ruby
Article #1006Re: serwer WWW
From: Jaroslaw Zabiello
Date: Fri, 28 Mar 2008 04:59
Date: Fri, 28 Mar 2008 04:59
160 lines
6199 bytes
6199 bytes
Dnia 27-03-2008 o 09:43:29 Kazimierz Trewiń <ftrtuilhjk@hjkigj57g6fh.pl>
napisał(a):
> edek pisze:
>> Spróbuj może ściągnąć sobie mongrela na windowsy i zobaczyć, czy nie da
>> się go w prosty sposób przerobić na portable.
>> Jejku, ale Ty niepotrzebnie kombinujesz.
>
> Webrick ma jakies przyklady wiec od niego zaczynalem.
> niestety dalej utknalem. nie wiem jak wziasc parametry
> np /index?a=test&b=tt
Do bani ten Webrick. Zapomnij. Lepiej użyj porządnego, prostego i
wydajnego frameworka - Merb (http://merbivore.com/, instalacja: gem
install merb) Potrafi tworzyć projekty na 3 sposoby.
$ merb-gen app full_wypas
$ merb-gen app uproszczony -flat
$ merb-gen app minimalny --very-flat
Zwłaszcza ten ostatni jest ciekawy, bo jest nawet prostszy od tego
przykładu z Webrickiem. Serwer uruchamiasz przez: merb -I minimalny.rb
(zobacz merb --help po więcej parametrów). Domyślnie serwer podnosi się
na http://localhost:4000.
Cały kod serwera streszcza się do
Merb::Router.prepare do |r|
r.match('/').to(:controller => 'minimalny', :action =>'index')
end
class Minimalny < Merb::Controller
def index
"Dostałem parametry: #{params.inspect}"
end
end
Merb::Config.use { |c|
c[:framework] = {},
c[:session_store] = 'none',
c[:exception_details] = true
}
Wejście na http://localhost:4000/?a=test&b=tt wyświetli
Dostałem parametry: {"a"=>"test", "b"=>"tt", "action"=>"index",
"controller"=>"minimalny"}
> mysle, ze gdyby mi sie udalo to zrobic + jakas prosta baza danych chocby
> i plikowa to by wystarczylo.
SQLite (http://www.sqlite.org/) będzie tu doskonały, bo to baza plikowa
ale z pełnym dostępem do SQL i jest bardzo szybka. Musisz tylko
doinstalować obsługę SQlite dla Rubiego:
sudo gem install sqlite3-ruby
OK. Teraz pokaże ci krok po kroku jak szybko zmontować prostą aplikację.
Wpierw tworzymy projekt (w pełnej wersji, bo potem łatwiej z tym pracować)
$ merb-gen app myproj
Zostanie stworzony katalog myproj z różnymi plikami i katalogami w środku.
To jest szkielet aplikacji. I tak jest prostszy od tego co generują Rails.
Aby uaktywnić obsługę bazy danych, wejdź do pliku config/init.rb i
odkomentuj jedną linijkę, tak aby było:
use_orm :sequel
Tym samym Merb będzie pracował z Sequel (info:
http://code.google.com/p/ruby-sequel/). Znacznie uprości to pracę z bazą
SQLite i ułatwi ci ewentualne przepięcie aplikacji ze SQLite do MySQL czy
innej bazy.
Teraz przejdź do konsoli i odpal w katalogu projektu polecenie/skrypt
merb-gen
Merb już wie, że chcesz używać bazy, więc automatycznie stworzy ci teraz
plik konfiguracyjny config/database.sample.yml. Zmień jego nazwę na
database.yml. Domyślnie tworzone są tam ustawienia dla MySQL. Aby użyć
SQLite, zmień go na:
---
:development: &defaults
:adapter: sqlite3
:database: baza.db
:encoding: utf8
:test:
<<: *defaults
:database: baza-testowa.db
:production:
<<: *defaults
Teraz stworzmy jakiś przykładowy model danych z użytkownikami i kontroler
do ich zarządzania.
merb-gen resource user
Przejdź do pliku schema/migrations/001_user.rb i zmień go na
class UserMigration < Sequel::Migration
def up
create_table :users do
varchar :name, :unique => true
primary_key :id
end
end
def down
execute "DROP TABLE users"
end
end
(więcej o migracjach http://code.google.com/p/ruby-sequel/wiki/Migrations)
Będąc w katalogu projektu, odpal polecenie:
rake sequel:db:migrate
Zostanie stworzona baza (plik: baza.db) oraz tabela users. No to teraz
trochę się pobawmy interaktywną konsolą aby dodać jakieś dane do bazy.
$ merb -i
~ Loaded DEVELOPMENT Environment...
~ loading gem 'merb_sequel' from ...
~ Connecting to the 'baza.db' database on '' using 'sqlite' ...
~ Compiling routes...
~ Using 'share-nothing' cookie sessions (4kb limit per client)
>> User.create :name => 'Jarek'
=> #<User @values={:name=>"Jarek", :id=>1}>
>> User.create :name => 'Ewa'
=> #<User @values={:name=>"Ewa", :id=>2}>
>> User.all
=> [#<User @values={:name=>"Jarek", :id=>1}>, #<User
@values={:name=>"Ewa", :id=>2}>]
OK. Ostatni krok. Otwórz plik app/views/users/index.html.erb i wstaw:
<p>W bazie mam użytkowników o imionach:</h1>
<% for user in @users %>
<p><%= user.name %></p>
<% end %>
To wszystko! Odpal serwer z aplikacją za pomocą komendy: merb
(więcej: merb --help) i otwórz stronę http://localhost:4000/users
> Potem jesli bedzie dobrze dzialac nawet mozna skompilowac to jako
> program w C.
Nie można. To akurat jest kompletnie bez sensu. Nie ma potrzeby żadnej
kompilacji, wręcz to jest niemożliwe, bo Ruby jest interpreterem. Nie wiem
po co ci to. Jeśli już chcesz zapakować wszystko do jednego pliku to
lepiej, stworzyć javowy *.jar i odpalać to przez java -jar myproj.jar. Ale
to wymaga użycia JRuby.
--
Jarosław Zabiełło
http://blog.zabiello.com
Technical Details
Message-ID:
<op.t8pmt1w2yvsyti@macbook-pro-15-zbiru.local>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<fsapgk$o6c$1@nemesis.news.neostrada.pl> <fsda7c$bnp$1@inews.gazeta.pl> <fsdbb1$fk3$1@atlantis.news.neostrada.pl> <op.t8mjo1p1r2rg33@jzmbp.westglobal.com> <fsfhvq$okf$1@atlantis.news.neostrada.pl> <fsfm3d$mqr$1@inews.gazeta.pl> <fsfmnc$ae7$1@atlantis.news.neostrada.pl> <fsfonf$1hu$1@inews.gazeta.pl> <fsfq17$kp7$1@atlantis.news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "Jaroslaw Zabiello" <hipertracker@gmail.com> Newsgroups: pl.comp.lang.ruby Subject: Re: serwer WWW Date: Fri, 28 Mar 2008 04:59:31 -0000 Organization: http://zabiello.com Lines: 160 Message-ID: <op.t8pmt1w2yvsyti@macbook-pro-15-zbiru.local> References: <fsapgk$o6c$1@nemesis.news.neostrada.pl> <fsda7c$bnp$1@inews.gazeta.pl> <fsdbb1$fk3$1@atlantis.news.neostrada.pl> <op.t8mjo1p1r2rg33@jzmbp.westglobal.com> <fsfhvq$okf$1@atlantis.news.neostrada.pl> <fsfm3d$mqr$1@inews.gazeta.pl> <fsfmnc$ae7$1@atlantis.news.neostrada.pl> <fsfonf$1hu$1@inews.gazeta.pl> <fsfq17$kp7$1@atlantis.news.neostrada.pl> NNTP-Posting-Host: 89.127.179.95 Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1206680393 21514 89.127.179.95 (28 Mar 2008 04:59:53 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Fri, 28 Mar 2008 04:59:53 +0000 (UTC) X-User: hipertracker User-Agent: Opera Mail/9.26 (MacIntel) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit