sinatra 2.2.2 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sinatra might be problematic. Click here for more details.

data/README.hu.md DELETED
@@ -1,728 +0,0 @@
1
- # Sinatra
2
- *Fontos megjegyzés: Ez a dokumentum csak egy fordítása az angol nyelvű
3
- változatnak, és lehet, hogy nem naprakész.*
4
-
5
- A Sinatra egy [DSL](https://en.wikipedia.org/wiki/Domain-specific_language)
6
- webalkalmazások Ruby nyelven történő fejlesztéséhez, minimális
7
- energiabefektetéssel:
8
-
9
- ```ruby
10
- # myapp.rb
11
- require 'sinatra'
12
- get '/' do
13
- 'Helló Világ!'
14
- end
15
- ```
16
-
17
- Telepítsd a gem-et és indítsd el az alkalmazást a következőképpen:
18
-
19
- ```ruby
20
- sudo gem install sinatra
21
- ruby myapp.rb
22
- ```
23
-
24
- Az alkalmazás elérhető lesz itt: [http://localhost:4567](http://localhost:4567)
25
-
26
- ## Útvonalak (routes)
27
-
28
- A Sinatrában az útvonalat egy HTTP metódus és egy URL-re illeszkedő minta
29
- párosa alkotja. Minden egyes útvonalhoz tartozik egy blokk:
30
-
31
- ```ruby
32
- get '/' do
33
- .. megjelenítünk valamit ..
34
- end
35
-
36
- post '/' do
37
- .. létrehozunk valamit ..
38
- end
39
-
40
- put '/' do
41
- .. frissítünk valamit ..
42
- end
43
-
44
- delete '/' do
45
- .. törlünk valamit ..
46
- end
47
- ```
48
-
49
- Az útvonalak illeszkedését a rendszer a definiálásuk sorrendjében
50
- ellenőrzi. Sorrendben mindig az első illeszkedő útvonalhoz tartozó metódus kerül
51
- meghívásra.
52
-
53
- Az útvonalminták tartalmazhatnak paramétereket is, melyeket a `params`
54
- hash-ből érhetünk el:
55
-
56
- ```ruby
57
- get '/hello/:name' do
58
- # illeszkedik a "GET /hello/foo" és a "GET /hello/bar" útvonalakra
59
- # ekkor params['name'] értéke 'foo' vagy 'bar' lesz
60
- "Helló #{params['name']}!"
61
- end
62
- ```
63
-
64
- A kulcsszavas argumentumokat (named parameters) blokk paraméterek útján
65
- is el tudod érni:
66
-
67
- ```ruby
68
- get '/hello/:name' do |n|
69
- "Helló #{n}!"
70
- end
71
- ```
72
-
73
- Az útvonalmintákban szerepelhetnek joker paraméterek is, melyeket a
74
- `params['splat']` tömbön keresztül tudunk elérni.
75
-
76
- ```ruby
77
- get '/say/*/to/*' do
78
- # illeszkedik a /say/hello/to/world mintára
79
- params['splat'] # => ["hello", "world"]
80
- end
81
-
82
- get '/download/*.*' do
83
- # illeszkedik a /download/path/to/file.xml mintára
84
- params['splat'] # => ["path/to/file", "xml"]
85
- end
86
- ```
87
-
88
- Reguláris kifejezéseket is felvehetünk az útvonalba:
89
-
90
- ```ruby
91
- get /\/hello\/([\w]+)/ do
92
- "Helló, #{params['captures'].first}!"
93
- end
94
- ```
95
-
96
- Vagy blokk paramétereket:
97
-
98
- ```ruby
99
- get %r{/hello/([\w]+)} do |c|
100
- "Helló, #{c}!"
101
- end
102
- ```
103
-
104
- Az útvonalak azonban számos egyéb illeszkedési feltétel szerint is
105
- tervezhetők, így például az user agent karakterláncot alapul véve:
106
-
107
- ```ruby
108
- get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
109
- "A Songbird #{params['agent'][0]} verzióját használod"
110
- end
111
-
112
- get '/foo' do
113
- # illeszkedik az egyéb user agentekre
114
- end
115
- ```
116
-
117
- ## Statikus állományok
118
-
119
- A statikus fájlok kiszolgálása a `./public` könyvtárból
120
- történik, de természetesen más könyvtárat is megadhatsz erre a célra,
121
- mégpedig a :public_folder kapcsoló beállításával:
122
-
123
- set :public_folder, __dir__ + '/static'
124
-
125
- Fontos megjegyezni, hogy a nyilvános könyvtár neve nem szerepel az URL-ben.
126
- A ./public/css/style.css fájl az
127
- `http://example.com/css/style.css` URL-en lesz elérhető.
128
-
129
- ## Nézetek és Sablonok
130
-
131
- A sablonfájlokat rendszerint a `./views` könyvtárba helyezzük, de
132
- itt is lehetőség nyílik egyéb könyvtár használatára:
133
-
134
- set :views, __dir__ + '/templates'
135
-
136
- Nagyon fontos észben tartani, hogy a sablononkra mindig szimbólumokkal
137
- hivatkozunk, még akkor is, ha egyéb (ebben az esetben a
138
- :'subdir/template') könyvtárban tároljuk őket. A renderelő
139
- metódusok minden, nekik közvetlenül átadott karakterláncot megjelenítenek.
140
-
141
- ### Haml sablonok
142
-
143
- HAML sablonok rendereléséhez szükségünk lesz a haml gem-re vagy könyvtárra:
144
-
145
- ```ruby
146
- # Importáljuk be a haml-t az alkalmazásba
147
- require 'haml'
148
-
149
- get '/' do
150
- haml :index
151
- end
152
- ```
153
-
154
- Ez szépen lerendereli a `./views/index.haml` sablont.
155
-
156
- A [Haml kapcsolói](http://haml.hamptoncatlin.com/docs/rdoc/classes/Haml.html)
157
- globálisan is beállíthatók a Sinatra konfigurációi között, lásd az
158
- [Options and Configurations](http://www.sinatrarb.com/configuration.html) lapot.
159
- A globális beállításokat lehetőségünk van felülírni metódus szinten is.
160
-
161
- ```ruby
162
- set :haml, {:format => :html5 } # az alapértelmezett Haml formátum az :xhtml
163
-
164
- get '/' do
165
- haml :index, :haml_options => {:format => :html4 } # immár felülírva
166
- end
167
- ```
168
-
169
- ### Erb sablonok
170
-
171
- # Importáljuk be az erb-t az alkalmazásba
172
-
173
- ```ruby
174
- require 'erb'
175
-
176
- get '/' do
177
- erb :index
178
- end
179
- ```
180
-
181
- Ez a `./views/index.erb` sablont fogja lerenderelni.
182
-
183
- ### Builder sablonok
184
-
185
- Szükségünk lesz a builder gem-re vagy könyvtárra a builder sablonok
186
- rendereléséhez:
187
-
188
- # Importáljuk be a builder-t az alkalmazásba
189
-
190
- ```ruby
191
- require 'builder'
192
-
193
- get '/' do
194
- builder :index
195
- end
196
- ```
197
-
198
- Ez pedig a `./views/index.builder` állományt fogja renderelni.
199
-
200
- ### Sass sablonok
201
-
202
- Sass sablonok használatához szükség lesz a haml gem-re vagy könyvtárra:
203
-
204
- # Be kell importálni a haml, vagy a sass könyvtárat
205
-
206
- ```ruby
207
- require 'sass'
208
-
209
- get '/stylesheet.css' do
210
- sass :stylesheet
211
- end
212
- ```
213
-
214
- Így a `./views/stylesheet.sass` fájl máris renderelhető.
215
-
216
- A [Sass kapcsolói](http://haml.hamptoncatlin.com/docs/rdoc/classes/Sass.html)
217
- globálisan is beállíthatók a Sinatra konfigurációi között, lásd az
218
- [Options and Configurations](http://www.sinatrarb.com/configuration.html) lapot.
219
- A globális beállításokat lehetőségünk van felülírni metódus szinten is.
220
-
221
- ```ruby
222
- set :sass, {:style => :compact } # az alapértelmezett Sass stílus a :nested
223
-
224
- get '/stylesheet.css' do
225
- sass :stylesheet, :sass_options => {:style => :expanded } # felülírva
226
- end
227
- ```
228
-
229
- ### Beágyazott sablonok
230
-
231
- ```ruby
232
- get '/' do
233
- haml '%div.title Helló Világ'
234
- end
235
- ```
236
-
237
- Lerendereli a beágyazott sablon karakerláncát.
238
-
239
- ### Változók elérése a sablonokban
240
-
241
- A sablonok ugyanabban a kontextusban kerülnek kiértékelésre, mint az
242
- útvonal metódusok (route handlers). Az útvonal metódusokban megadott
243
- változók közvetlenül elérhetőek lesznek a sablonokban:
244
-
245
- ```ruby
246
- get '/:id' do
247
- @foo = Foo.find(params['id'])
248
- haml '%h1= @foo.name'
249
- end
250
- ```
251
-
252
- De megadhatod egy lokális változókat tartalmazó explicit hash-ben is:
253
-
254
- ```ruby
255
- get '/:id' do
256
- foo = Foo.find(params['id'])
257
- haml '%h1= foo.name', :locals => { :foo => foo }
258
- end
259
- ```
260
-
261
- Ezt leginkább akkor érdemes megtenni, ha partial-eket akarunk renderelni
262
- valamely más sablonból.
263
-
264
- ### Fájlon belüli sablonok
265
-
266
- Sablonokat úgy is megadhatunk, hogy egyszerűen az alkalmazás fájl
267
- végére begépeljük őket:
268
-
269
- ```ruby
270
- require 'rubygems'
271
- require 'sinatra'
272
-
273
- get '/' do
274
- haml :index
275
- end
276
-
277
- __END__
278
-
279
- @@ layout
280
- %html
281
- = yield
282
-
283
- @@ index
284
- %div.title Helló Világ!!!!!
285
- ```
286
-
287
- Megjegyzés: azok a fájlon belüli sablonok, amelyek az alkalmazás fájl végére
288
- kerülnek és függnek a sinatra könyvtártól, automatikusan betöltődnek.
289
- Ha ugyanezt más alkalmazásfájlban is szeretnéd megtenni, hívd meg
290
- a <tt>use_in_file_templates!</tt> metódust az adott fájlban.
291
-
292
- ### Kulcsszavas sablonok
293
-
294
- Sablonokat végül a felsőszintű <tt>template</tt> metódussal is
295
- definiálhatunk:
296
-
297
- ```ruby
298
- template :layout do
299
- "%html\n =yield\n"
300
- end
301
-
302
- template :index do
303
- '%div.title Helló Világ!'
304
- end
305
-
306
- get '/' do
307
- haml :index
308
- end
309
- ```
310
-
311
- Ha létezik "layout" nevű sablon, akkor az minden esetben meghívódik, amikor
312
- csak egy sablon renderelésre kerül. A layoutokat ki lehet kapcsolni a
313
- `:layout => false` meghívásával.
314
-
315
- ```ruby
316
- get '/' do
317
- haml :index, :layout => !request.xhr?
318
- end
319
- ```
320
-
321
- ## Helperek
322
-
323
- Használd a felső szintű <tt>helpers</tt> metódust azokhoz a helper
324
- függvényekhez, amiket az útvonal metódusokban és a sablonokban akarsz
325
- használni:
326
-
327
- ```ruby
328
- helpers do
329
- def bar(name)
330
- "#{name}bar"
331
- end
332
- end
333
-
334
- get '/:name' do
335
- bar(params['name'])
336
- end
337
- ```
338
-
339
- ## Szűrők (filters)
340
-
341
- Az előszűrők (before filter) az adott hívás kontextusában minden egyes
342
- kérés alkalmával kiértékelődnek, így módosíthatják a kérést és a
343
- választ egyaránt. A szűrőkbe felvett példányváltozók elérhetőek lesznek
344
- az útvonalakban és a sablonokban is:
345
-
346
- ```ruby
347
- before do
348
- @note = 'Csá!'
349
- request.path_info = '/foo/bar/baz'
350
- end
351
-
352
- get '/foo/*' do
353
- @note #=> 'Szeva!'
354
- params['splat'] #=> 'bar/baz'
355
- end
356
- ```
357
-
358
- Az utószűrők az egyes kérések után, az adott kérés kontextusában kerülnek
359
- kiértékelésre, így ezek is képesek módosítani a kérést és a választ egyaránt.
360
- Az előszűrőkben és úvonalakban létrehozott példányváltozók elérhetőek lesznek
361
- az utószűrők számára:
362
-
363
- ```ruby
364
- after do
365
- puts response.status
366
- end
367
- ```
368
-
369
- ## Megállítás
370
-
371
- Egy kérés szűrőben vagy útvonalban történő azonnal blokkolásához
372
- használd a következő parancsot:
373
-
374
- halt
375
-
376
- A megállításkor egy blokktörzset is megadhatsz ...
377
-
378
- halt 'ez fog megjelenni a törzsben'
379
-
380
- Vagy állítsd be a HTTP státuszt és a törzset is egyszerre ...
381
-
382
- halt 401, 'menj innen!'
383
-
384
- ## Passzolás
385
-
386
- Az útvonalak továbbadhatják a végrehajtást egy másik útvonalnak
387
- a `pass` függvényhívással:
388
-
389
- ```ruby
390
- get '/guess/:who' do
391
- pass unless params['who'] == 'Frici'
392
- "Elkaptál!"
393
- end
394
-
395
- get '/guess/*' do
396
- "Elhibáztál!"
397
- end
398
- ```
399
-
400
- Az útvonal blokkja azonnal kilép és átadja a vezérlést a következő
401
- illeszkedő útvonalnak. Ha nem talál megfelelő útvonalat, a Sinatra
402
- egy 404-es hibával tér vissza.
403
-
404
- ## Beállítások
405
-
406
- Csak indításkor, de minden környezetre érvényesen fusson le:
407
-
408
- ```ruby
409
- configure do
410
- ...
411
- end
412
- ```
413
-
414
- Csak akkor fusson le, ha a környezet (a APP_ENV környezeti változóban)
415
- `:production`-ra van állítva:
416
-
417
- ```ruby
418
- configure :production do
419
- ...
420
- end
421
- ```
422
-
423
- Csak akkor fusson le, ha a környezet <tt>:production</tt> vagy <tt>:test</tt>:
424
-
425
- ```ruby
426
- configure :production, :test do
427
- ...
428
- end
429
- ```
430
-
431
- ## Hibakezelés
432
-
433
- A hibakezelők ugyanabban a kontextusban futnak le, mint az útvonalak és
434
- előszűrők, ezért számukra is elérhetőek mindazok a könyvtárak, amelyek
435
- az utóbbiak rendelkezésére is állnak; így például a `haml`,
436
- az `erb`, a `halt` stb.
437
-
438
- ### Nem található
439
-
440
- Amikor a `Sinatra::NotFound` kivétel fellép, vagy a válasz HTTP
441
- státuszkódja 404-es, mindig a `not_found` metódus hívódik meg.
442
-
443
- ```ruby
444
- not_found do
445
- 'Sehol sem találom, amit keresel'
446
- end
447
- ```
448
-
449
- ### Hiba
450
-
451
- Az `error` metódus hívódik meg olyankor, amikor egy útvonal, blokk vagy
452
- előszűrő kivételt vált ki. A kivétel objektum lehívható a
453
- `sinatra.error` Rack változótól:
454
-
455
- ```ruby
456
- error do
457
- 'Elnézést, de valami szörnyű hiba lépett fel - ' + env['sinatra.error'].message
458
- end
459
- ```
460
-
461
- Egyéni hibakezelés:
462
-
463
- ```ruby
464
- error MyCustomError do
465
- 'Szóval az van, hogy...' + env['sinatra.error'].message
466
- end
467
- ```
468
-
469
- És amikor fellép:
470
-
471
- ```ruby
472
- get '/' do
473
- raise MyCustomError, 'valami nem stimmel!'
474
- end
475
- ```
476
-
477
- Ez fog megjelenni:
478
-
479
- Szóval az van, hogy... valami nem stimmel!
480
-
481
- A Sinatra speciális `not_found` és `error` hibakezelőket
482
- használ, amikor a futtatási környezet fejlesztői módba van kapcsolva.
483
-
484
- ## Mime típusok
485
-
486
- A `send_file` metódus használatakor, vagy statikus fájlok
487
- kiszolgálásakor előfordulhat, hogy a Sinatra nem ismeri fel a fájlok
488
- mime típusát. Ilyenkor használd a +mime_type+ kapcsolót a fájlkiterjesztés
489
- bevezetéséhez:
490
-
491
- ```ruby
492
- mime_type :foo, 'text/foo'
493
- ```
494
-
495
- ## Rack Middleware
496
-
497
- A Sinatra egy Ruby keretrendszerek számára kifejlesztett egyszerű és szabványos
498
- interfészre, a [Rack](http://rack.github.io/) -re épül. A Rack fejlesztői
499
- szempontból egyik legérdekesebb jellemzője, hogy támogatja az úgynevezett
500
- "middleware" elnevezésű komponenseket, amelyek beékelődnek a szerver és az
501
- alkalmazás közé, így képesek megfigyelni és/vagy módosítani a HTTP
502
- kéréseket és válaszokat. Segítségükkel különféle, egységesen működő
503
- funkciókat építhetünk be rendszerünkbe.
504
-
505
- A Sinatra keretrendszerben gyerekjáték a Rack middleware-ek behúzása a
506
- `use` metódus segítségével:
507
-
508
- ```ruby
509
- require 'sinatra'
510
- require 'my_custom_middleware'
511
-
512
- use Rack::Lint
513
- use MyCustomMiddleware
514
-
515
- get '/hello' do
516
- 'Helló Világ'
517
- end
518
- ```
519
-
520
- A `use` metódus szemantikája megegyezik a
521
- [Rack::Builder](http://www.rubydoc.info/github/rack/rack/master/Rack/Builder) DSL-ben
522
- használt +use+ metóduséval (az említett DSL-t leginkább rackup állományokban
523
- használják). Hogy egy példát említsünk, a `use` metódus elfogad
524
- változókat és blokkokat egyaránt, akár kombinálva is ezeket:
525
-
526
- ```ruby
527
- use Rack::Auth::Basic do |username, password|
528
- username == 'admin' && password == 'titkos'
529
- end
530
- ```
531
-
532
- A Rack terjesztéssel egy csomó alap middleware komponens is érkezik,
533
- amelyekkel a naplózás, URL útvonalak megadása, autentikáció és
534
- munkamenet-kezelés könnyen megvalósítható. A Sinatra ezek közül elég
535
- sokat automatikusan felhasznál a beállításoktól függően, így ezek
536
- explicit betöltésével (+use+) nem kell bajlódnod.
537
-
538
- ## Tesztelés
539
-
540
- Sinatra teszteket bármely Rack alapú tesztelő könyvtárral vagy
541
- keretrendszerrel készíthetsz. Mi a [Rack::Test](http://gitrdoc.com/brynary/rack-test)
542
- könyvtárat ajánljuk:
543
-
544
- ```ruby
545
- require 'my_sinatra_app'
546
- require 'rack/test'
547
-
548
- class MyAppTest < Minitest::Test
549
- include Rack::Test::Methods
550
-
551
- def app
552
- Sinatra::Application
553
- end
554
-
555
- def test_my_default
556
- get '/'
557
- assert_equal 'Helló Világ!', last_response.body
558
- end
559
-
560
- def test_with_params
561
- get '/meet', :name => 'Frici'
562
- assert_equal 'Helló Frici!', last_response.body
563
- end
564
-
565
- def test_with_user_agent
566
- get '/', {}, 'HTTP_USER_AGENT' => 'Songbird'
567
- assert_equal "Songbird-öt használsz!", last_response.body
568
- end
569
- end
570
- ```
571
-
572
- Megjegyzés: A beépített Sinatra::Test és Sinatra::TestHarness osztályok
573
- a 0.9.2-es kiadástól kezdve elavultnak számítanak.
574
-
575
- ## Sinatra::Base - Middleware-ek, könyvtárak és moduláris alkalmazások
576
-
577
- Az alkalmazást felső szinten építeni megfelelhet mondjuk egy kisebb
578
- app esetén, ám kifejezetten károsnak bizonyulhat olyan komolyabb,
579
- újra felhasználható komponensek készítésekor, mint például egy Rack
580
- middleware, Rails metal, egyszerűbb kiszolgáló komponenssel bíró
581
- könyvtárak vagy éppen Sinatra kiterjesztések. A felső szintű DSL
582
- bepiszkítja az Objektum névteret, ráadásul kisalkalmazásokra szabott
583
- beállításokat feltételez (így például egyetlen alkalmazásfájl,
584
- `./public`
585
- és `./views` könyvtár meglétét, naplózást, kivételkezelő oldalt stb.).
586
- Itt jön a képbe a Sinatra::Base osztály:
587
-
588
- ```ruby
589
- require 'sinatra/base'
590
-
591
- class MyApp < Sinatra::Base
592
- set :sessions, true
593
- set :foo, 'bar'
594
-
595
- get '/' do
596
- 'Helló Világ!'
597
- end
598
- end
599
- ```
600
-
601
- A MyApp osztály immár önálló Rack komponensként, mondjuk Rack middleware-ként
602
- vagy alkalmazásként, esetleg Rails metal-ként is tud működni. Közvetlenül
603
- használhatod (`use`) vagy futtathatod (`run`) az osztályodat egy rackup
604
- konfigurációs állományban (`config.ru`), vagy egy szerverkomponenst
605
- tartalmazó könyvtár vezérlésekor:
606
-
607
- ```ruby
608
- MyApp.run! :host => 'localhost', :port => 9090
609
- ```
610
-
611
- A Sinatra::Base gyermekosztályaiban elérhető metódusok egyúttal a felső
612
- szintű DSL-en keresztül is hozzáférhetők. A legtöbb felső szintű
613
- alkalmazás átalakítható Sinatra::Base alapú komponensekké két lépésben:
614
-
615
- * A fájlban nem a `sinatra`, hanem a `sinatra/base` osztályt kell
616
- beimportálni, mert egyébként az összes Sinatra DSL metódus a fő
617
- névtérbe kerül.
618
- * Az alkalmazás útvonalait, hibakezelőit, szűrőit és beállításait
619
- a Sinatra::Base osztály gyermekosztályaiban kell megadni.
620
-
621
- A `Sinatra::Base` osztály igazából egy üres lap: a legtöbb funkció
622
- alapból ki van kapcsolva, beleértve a beépített szervert is. A
623
- beállításokkal és az egyes kapcsolók hatásával az
624
- [Options and Configuration](http://www.sinatrarb.com/configuration.html) lap
625
- foglalkozik.
626
-
627
- Széljegyzet: A Sinatra felső szintű DSL-je egy egyszerű delegációs
628
- rendszerre épül. A Sinatra::Application osztály - a Sinatra::Base egy
629
- speciális osztályaként - fogadja az összes :get, :put, :post,
630
- :delete, :before, :error, :not_found, :configure és :set üzenetet,
631
- ami csak a felső szintre beérkezik. Érdemes utánanézned a kódban,
632
- miképp [kerül be](http://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb#L25)
633
- a [Sinatra::Delegator mixin](http://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1064)
634
- a fő névtérbe.
635
-
636
- ## Parancssori lehetőségek
637
-
638
- Sinatra alkalmazásokat közvetlenül futtathatunk:
639
-
640
- ```
641
- ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-s HANDLER]
642
- ```
643
-
644
- Az alábbi kapcsolókat ismeri fel a rendszer:
645
-
646
- -h # segítség
647
- -p # a port beállítása (alapértelmezés szerint ez a 4567-es)
648
- -e # a környezet beállítása (alapértelmezés szerint ez a development)
649
- -s # a rack szerver/handler beállítása (alapértelmezetten ez a thin)
650
- -x # a mutex lock bekapcsolása (alapértelmezetten ki van kapcsolva)
651
-
652
- ## Több szálon futtatás
653
-
654
- _Parafrázis [Konstantin StackOverflow válasza][so-answer] alapján_
655
-
656
- A Sinatra nem szabja meg az konkurenciakezelés módját, hanem az alatta működő
657
- Rack kezelőre (szerverre) hagyja ezt a feladatot, ami például a Thin, a Puma,
658
- vagy a WEBrick. A Sinatra önmagában szálbiztos, tehát semmilyen probléma sem
659
- adódik, ha a Rack kezelő többszálú konkurenciamodellt használ. Ezek szerint
660
- szerverindításkor meg kell adni a Rack szervernek megfelelő indítási módot.
661
- A következő példa egy többszálú Thin szerver indítását mutatja be.
662
-
663
- ```ruby
664
- # app.rb
665
-
666
- require 'sinatra/base'
667
-
668
- class App < Sinatra::Base
669
- get '/' do
670
- "Hello, World"
671
- end
672
- end
673
-
674
- App.run!
675
-
676
- ```
677
-
678
- A szerverindítás parancsa a következő lenne:
679
-
680
- ``` shell
681
- thin --threaded start
682
- ```
683
-
684
- [so-answer]: http://stackoverflow.com/a/6282999/1725341
685
-
686
- ## Fejlesztői változat
687
-
688
- Ha a Sinatra legfrissebb, fejlesztői változatát szeretnéd használni,
689
- készíts egy helyi másolatot és indítsd az alkalmazásodat úgy,
690
- hogy a `sinatra/lib` könyvtár elérhető legyen a
691
- `LOAD_PATH`-on:
692
-
693
- ```
694
- cd myapp
695
- git clone git://github.com/sinatra/sinatra.git
696
- ruby -Isinatra/lib myapp.rb
697
- ```
698
-
699
- De hozzá is adhatod a <tt>sinatra/lib</tt> könyvtárat a <tt>LOAD_PATH</tt>-hoz
700
- az alkalmazásodban:
701
-
702
- ```ruby
703
- $LOAD_PATH.unshift __dir__ + '/sinatra/lib'
704
- require 'rubygems'
705
- require 'sinatra'
706
-
707
- get '/about' do
708
- "A következő változatot futtatom " + Sinatra::VERSION
709
- end
710
- ```
711
-
712
- A Sinatra frissítését később így végezheted el:
713
-
714
- ```
715
- cd myproject/sinatra
716
- git pull
717
- ```
718
-
719
- ## További információk
720
-
721
- * [A projekt weboldala](http://www.sinatrarb.com/) - Kiegészítő dokumentáció,
722
- hírek, hasznos linkek
723
- * [Közreműködés](http://www.sinatrarb.com/contributing.html) - Hibát találtál?
724
- Segítségre van szükséged? Foltot küldenél be?
725
- * [Lighthouse](http://sinatra.lighthouseapp.com) - Hibakövetés és kiadások
726
- * [Twitter](https://twitter.com/sinatra)
727
- * [Levelezőlista](http://groups.google.com/group/sinatrarb)
728
- * [IRC: #sinatra](irc://chat.freenode.net/#sinatra) a http://freenode.net címen