sinatra 1.3.2 → 1.3.3
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/CHANGES +27 -0
- data/Gemfile +11 -6
- data/README.de.rdoc +332 -196
- data/README.es.rdoc +41 -6
- data/README.fr.rdoc +58 -5
- data/README.jp.rdoc +1 -1
- data/README.ko.rdoc +1926 -0
- data/README.pt-br.rdoc +1 -1
- data/README.pt-pt.rdoc +1 -1
- data/README.rdoc +94 -71
- data/README.ru.rdoc +1 -1
- data/README.zh.rdoc +1 -1
- data/Rakefile +2 -1
- data/lib/sinatra.rb +0 -3
- data/lib/sinatra/base.rb +91 -33
- data/lib/sinatra/version.rb +1 -1
- data/sinatra.gemspec +1 -1
- data/test/delegator_test.rb +1 -1
- data/test/filter_test.rb +3 -3
- data/test/helpers_test.rb +5 -5
- data/test/integration/app.rb +57 -1
- data/test/integration_helper.rb +214 -0
- data/test/integration_test.rb +68 -48
- data/test/routing_test.rb +6 -0
- data/test/sass_test.rb +1 -0
- data/test/scss_test.rb +1 -0
- data/test/static_test.rb +1 -0
- data/test/streaming_test.rb +17 -0
- metadata +93 -56
data/CHANGES
CHANGED
@@ -1,3 +1,30 @@
|
|
1
|
+
= 1.3.3 / 2012-08-19
|
2
|
+
|
3
|
+
* Improved documentation. (burningTyger, Konstantin Haase, Gabriel Andretta,
|
4
|
+
Anurag Priyam, michelc)
|
5
|
+
|
6
|
+
* No longer modify the load path. (Konstantin Haase)
|
7
|
+
|
8
|
+
* When keeping a stream open, set up callback/errback correctly to deal with
|
9
|
+
clients closing the connection. (Konstantin Haase)
|
10
|
+
|
11
|
+
* Fix bug where having a query param and a URL param by the same name would
|
12
|
+
concatinate the two values. (Konstantin Haase)
|
13
|
+
|
14
|
+
* Prevent douplicated log output when application is already wrapped in a
|
15
|
+
`Rack::CommonLogger`. (Konstantin Haase)
|
16
|
+
|
17
|
+
* Fix issue where `Rack::Link` and Rails were preventing indefinite streaming.
|
18
|
+
(Konstantin Haase)
|
19
|
+
|
20
|
+
* No longer cause warnings when running Ruby with `-w`. (Konstantin Haase)
|
21
|
+
|
22
|
+
* HEAD requests on static files no longer report a Content-Length of 0, but
|
23
|
+
instead the proper length. (Konstantin Haase)
|
24
|
+
|
25
|
+
* When protecting against CSRF attacks, drop the session instead of refusing
|
26
|
+
the request. (Konstantin Haase)
|
27
|
+
|
1
28
|
= 1.3.2 / 2011-12-30
|
2
29
|
|
3
30
|
* Don't automatically add `Rack::CommonLogger` if `Rack::Server` is adding it,
|
data/Gemfile
CHANGED
@@ -29,10 +29,10 @@ repos = {'tilt' => github % "rtomayko/tilt", 'rack' => github % "rack/rack"}
|
|
29
29
|
end
|
30
30
|
|
31
31
|
gem 'haml', '>= 3.0'
|
32
|
-
gem 'sass'
|
32
|
+
gem 'sass' if RUBY_VERSION < "2.0"
|
33
33
|
gem 'builder'
|
34
34
|
gem 'erubis'
|
35
|
-
gem 'liquid'
|
35
|
+
gem 'liquid' unless RUBY_ENGINE == 'rbx' and RUBY_VERSION > '1.9'
|
36
36
|
gem 'slim', '~> 1.0'
|
37
37
|
gem 'temple', '!= 0.3.3'
|
38
38
|
gem 'coffee-script', '>= 2.0'
|
@@ -47,19 +47,24 @@ if RUBY_ENGINE == 'jruby'
|
|
47
47
|
gem 'nokogiri', '!= 1.5.0'
|
48
48
|
gem 'jruby-openssl'
|
49
49
|
else
|
50
|
+
gem 'yajl-ruby'
|
50
51
|
gem 'nokogiri'
|
52
|
+
gem 'thin'
|
51
53
|
end
|
52
54
|
|
53
|
-
if RUBY_ENGINE == "ruby"
|
55
|
+
if RUBY_ENGINE == "ruby" and RUBY_VERSION > '1.9'
|
54
56
|
gem 'less', '~> 2.0'
|
55
57
|
else
|
56
58
|
gem 'less', '~> 1.0'
|
57
59
|
end
|
58
60
|
|
59
|
-
|
61
|
+
if RUBY_ENGINE != 'jruby' or not ENV['TRAVIS']
|
60
62
|
# C extensions
|
61
63
|
gem 'rdiscount'
|
62
|
-
platforms(:ruby_18)
|
64
|
+
platforms(:ruby_18) do
|
65
|
+
gem 'redcarpet'
|
66
|
+
gem 'mongrel'
|
67
|
+
end
|
63
68
|
gem 'RedCloth' unless RUBY_ENGINE == "macruby"
|
64
69
|
|
65
70
|
## bluecloth is broken
|
@@ -67,7 +72,7 @@ unless RUBY_ENGINE == 'jruby' && JRUBY_VERSION < "1.6.1" && !ENV['TRAVIS']
|
|
67
72
|
end
|
68
73
|
|
69
74
|
platforms :ruby_18, :jruby do
|
70
|
-
gem 'json'
|
75
|
+
gem 'json' unless RUBY_VERSION > '1.9' # is there a jruby but 1.8 only selector?
|
71
76
|
end
|
72
77
|
|
73
78
|
platforms :mri_18 do
|
data/README.de.rdoc
CHANGED
@@ -19,7 +19,7 @@ Einfach via +rubygems+ installieren und starten:
|
|
19
19
|
|
20
20
|
Die Seite kann nun unter http://localhost:4567 betrachtet werden.
|
21
21
|
|
22
|
-
Es wird empfohlen, den Thin-Server via <tt>gem install thin</tt> zu
|
22
|
+
Es wird empfohlen, den Thin-Server via <tt>gem install thin</tt> zu
|
23
23
|
installieren, den Sinatra dann, soweit vorhanden, automatisch verwendet.
|
24
24
|
|
25
25
|
== Routen
|
@@ -42,7 +42,7 @@ definiert. Jeder dieser Routen wird ein Ruby-Block zugeordnet:
|
|
42
42
|
delete '/' do
|
43
43
|
.. entferne etwas ..
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
options '/' do
|
47
47
|
.. zeige, was wir können ..
|
48
48
|
end
|
@@ -83,7 +83,7 @@ Oder mit Block-Parametern:
|
|
83
83
|
get '/download/*.*' do |pfad, endung|
|
84
84
|
[pfad, endung] # => ["Pfad/zu/Datei", "xml"]
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
Routen mit regulären Ausdrücken sind auch möglich:
|
88
88
|
|
89
89
|
get %r{/hallo/([\w]+)} do
|
@@ -99,7 +99,7 @@ Und auch hier können Block-Parameter genutzt werden:
|
|
99
99
|
Routen-Muster können auch mit optionalen Parametern ausgestattet werden:
|
100
100
|
|
101
101
|
get '/posts.?:format?' do
|
102
|
-
# passt auf "GET /posts" sowie jegliche Erweiterung
|
102
|
+
# passt auf "GET /posts" sowie jegliche Erweiterung
|
103
103
|
# wie "GET /posts.json", "GET /posts.xml" etc.
|
104
104
|
end
|
105
105
|
|
@@ -147,13 +147,13 @@ Es können auch andere Bedingungen relativ einfach hinzugefügt werden:
|
|
147
147
|
"Tut mir leid, verloren."
|
148
148
|
end
|
149
149
|
|
150
|
-
Bei Bedingungen, die mehrere Werte annehmen können, sollte ein Splat verwendet
|
150
|
+
Bei Bedingungen, die mehrere Werte annehmen können, sollte ein Splat verwendet
|
151
151
|
werden:
|
152
152
|
|
153
153
|
set(:auth) do |*roles| # <- hier kommt der Splat ins Spiel
|
154
154
|
condition do
|
155
155
|
unless logged_in? && roles.any? {|role| current_user.in_role? role }
|
156
|
-
redirect "/login/", 303
|
156
|
+
redirect "/login/", 303
|
157
157
|
end
|
158
158
|
end
|
159
159
|
end
|
@@ -161,7 +161,7 @@ werden:
|
|
161
161
|
get "/mein/account/", :auth => [:user, :admin] do
|
162
162
|
"Mein Account"
|
163
163
|
end
|
164
|
-
|
164
|
+
|
165
165
|
get "/nur/admin/", :auth => :admin do
|
166
166
|
"Nur Admins dürfen hier rein!"
|
167
167
|
end
|
@@ -170,18 +170,18 @@ werden:
|
|
170
170
|
|
171
171
|
Durch den Rückgabewert eines Routen-Blocks wird mindestens der Response-Body
|
172
172
|
festgelegt, der an den HTTP-Client, bzw. die nächste Rack-Middleware,
|
173
|
-
weitergegeben wird. Im Normalfall handelt es sich hierbei, wie in den
|
174
|
-
vorangehenden Beispielen zu sehen war, um einen String. Es werden allerdings
|
173
|
+
weitergegeben wird. Im Normalfall handelt es sich hierbei, wie in den
|
174
|
+
vorangehenden Beispielen zu sehen war, um einen String. Es werden allerdings
|
175
175
|
auch andere Werte akzeptiert.
|
176
176
|
|
177
177
|
Es kann jedes gültige Objekt zurückgegeben werden, bei dem es sich entweder um
|
178
178
|
einen Rack-Rückgabewert, einen Rack-Body oder einen HTTP-Status-Code handelt:
|
179
179
|
|
180
|
-
* Ein Array mit drei Elementen: <tt>[Status (Fixnum), Headers (Hash),
|
180
|
+
* Ein Array mit drei Elementen: <tt>[Status (Fixnum), Headers (Hash),
|
181
181
|
Response-Body (antwortet auf #each)]</tt>.
|
182
182
|
* Ein Array mit zwei Elementen: <tt>[Status (Fixnum), Response-Body (antwortet
|
183
183
|
auf #each)]</tt>.
|
184
|
-
* Ein Objekt, das auf <tt>#each</tt> antwortet und den an diese Methode
|
184
|
+
* Ein Objekt, das auf <tt>#each</tt> antwortet und den an diese Methode
|
185
185
|
übergebenen Block nur mit Strings als Übergabewerte aufruft.
|
186
186
|
* Ein Fixnum, das den Status-Code festlegt.
|
187
187
|
|
@@ -198,9 +198,9 @@ Damit lässt sich relativ einfach Streaming implementieren:
|
|
198
198
|
Ebenso kann die +stream+-Helfer-Methode (s.u.) verwendet werden, die Streaming
|
199
199
|
direkt in die Route integriert.
|
200
200
|
|
201
|
-
=== Eigene Routen-Muster
|
201
|
+
=== Eigene Routen-Muster
|
202
202
|
|
203
|
-
Wie oben schon beschrieben, ist Sinatra von Haus aus mit Unterstützung für
|
203
|
+
Wie oben schon beschrieben, ist Sinatra von Haus aus mit Unterstützung für
|
204
204
|
String-Muster und Reguläre Ausdrücke zum Abgleichen von Routen ausgestattet.
|
205
205
|
Das muss aber noch nicht alles sein, es können ohne großen Aufwand eigene
|
206
206
|
Routen-Muster erstellt werden:
|
@@ -226,7 +226,7 @@ Routen-Muster erstellt werden:
|
|
226
226
|
# ...
|
227
227
|
end
|
228
228
|
|
229
|
-
Beachte, dass das obige Beispiel etwas übertrieben wirkt. Es geht auch
|
229
|
+
Beachte, dass das obige Beispiel etwas übertrieben wirkt. Es geht auch
|
230
230
|
einfacher:
|
231
231
|
|
232
232
|
get // do
|
@@ -257,13 +257,92 @@ man die <tt>:static_cache_control</tt>-Einstellung (s.u.).
|
|
257
257
|
|
258
258
|
== Views/Templates
|
259
259
|
|
260
|
-
|
261
|
-
|
262
|
-
|
260
|
+
Alle Templatesprachen verwenden ihre eigene Renderingmethode, die jeweils
|
261
|
+
einen String zurückgibt:
|
262
|
+
|
263
|
+
get '/' do
|
264
|
+
erb :index
|
265
|
+
end
|
266
|
+
|
267
|
+
Dieses Beispiel rendert <tt>views/index.erb</tt>.
|
268
|
+
|
269
|
+
Anstelle eines Templatenamens kann man auch direkt die Templatesprache
|
270
|
+
verwenden:
|
271
|
+
|
272
|
+
get '/' do
|
273
|
+
code = "<%= Time.now %>"
|
274
|
+
erb code
|
275
|
+
end
|
276
|
+
|
277
|
+
Templates nehmen ein zweite Argument an, den Options-Hash:
|
278
|
+
|
279
|
+
get '/' do
|
280
|
+
erb :index, :layout => :post
|
281
|
+
end
|
282
|
+
|
283
|
+
Dieses Beispiel rendert <tt>views/index.erb</tt> eingebettet in
|
284
|
+
<tt>views/post.erb</tt> (Voreinstellung ist <tt>views/layout.erb</tt>, sofern
|
285
|
+
es vorhanden ist.)
|
286
|
+
|
287
|
+
Optionen, die Sinatra nicht versteht, werden an das Template weitergereicht:
|
288
|
+
|
289
|
+
get '/' do
|
290
|
+
haml :index, :format => :html5
|
291
|
+
end
|
292
|
+
|
293
|
+
Für alle Templates können auch generelle Einstellungen festgelegt werden:
|
263
294
|
|
264
|
-
set :
|
295
|
+
set :haml, :format => :html5
|
265
296
|
|
266
|
-
|
297
|
+
get '/' do
|
298
|
+
haml :index
|
299
|
+
end
|
300
|
+
|
301
|
+
Optionen, die an die Rendermethode weitergegeben werden, überschreiben die
|
302
|
+
Einstellungen, die mit +set+ festgelegt wurden.
|
303
|
+
|
304
|
+
Mögliche Einstellungen:
|
305
|
+
|
306
|
+
[locals]
|
307
|
+
Liste von lokalen Variablen, die and das Dokument weitergegeben werden.
|
308
|
+
Praktisch für Partials.
|
309
|
+
Beispiel: <tt>erb "<%= foo %>", :locals => {:foo => "bar"}</tt>
|
310
|
+
|
311
|
+
[default_encoding]
|
312
|
+
Gibt die Stringkodierung an, die verwendet werden soll. Voreingestellt auf
|
313
|
+
<tt>settings.default_encoding</tt>.
|
314
|
+
|
315
|
+
[views]
|
316
|
+
Ordner, aus dem die Templates heraus geladen werden. Voreingestellt auf
|
317
|
+
<tt>settings.views</tt>.
|
318
|
+
|
319
|
+
[layout]
|
320
|
+
Legt fest, ob ein Layouttemplate verwendet werden soll oder nicht (+true+
|
321
|
+
oder +false+). Ist es ein Symbol, dass legt es fest, welches Template als
|
322
|
+
Layout verwendet wird. Beispiel:
|
323
|
+
<tt>erb :index, :layout => !request.xhr?</tt>
|
324
|
+
|
325
|
+
[content_type]
|
326
|
+
Content-Type den das Template ausgibt. Voreinstellung hängt von der
|
327
|
+
Templatesprache ab.
|
328
|
+
|
329
|
+
[scope]
|
330
|
+
Scope, in dem das Template gerendert wird. Liegt standardmäßig innerhalb der
|
331
|
+
App-Instanz. Wird Scope geändert, sind Instanzvariablen und Helfermethoden
|
332
|
+
nicht verfügbar.
|
333
|
+
|
334
|
+
[layout_engine]
|
335
|
+
Legt fest, welcher Renderer für das Layout verantwortlich ist.
|
336
|
+
Hilfreich für Sprachen, die sonst keine Templates unterstützen.
|
337
|
+
Voreingestellt auf den Renderer, der für das Template verwendet wird.
|
338
|
+
Beispiel: <tt>set :rdoc, :layout_engine => :erb</tt>
|
339
|
+
|
340
|
+
Sinatra geht davon aus, dass die Templates sich im <tt>./views</tt> Verzeichnis
|
341
|
+
befinden. Es kann jedoch ein anderer Ordner festgelegt werden:
|
342
|
+
|
343
|
+
set :views, settings.root + '/templates'
|
344
|
+
|
345
|
+
Es ist zu beachten, dass immer mit Symbolen auf Templates verwiesen werden
|
267
346
|
muss, auch dann, wenn sie sich in einem Unterordner befinden:
|
268
347
|
|
269
348
|
haml :'unterverzeichnis/template'
|
@@ -281,7 +360,7 @@ Beginn ein 'require':
|
|
281
360
|
|
282
361
|
=== Haml Templates
|
283
362
|
|
284
|
-
Abhängigkeit:: {haml}[http://haml
|
363
|
+
Abhängigkeit:: {haml}[http://haml.info/]
|
285
364
|
Dateierweiterungs:: <tt>.haml</tt>
|
286
365
|
Beispiel:: <tt>haml :index, :format => :html5</tt>
|
287
366
|
|
@@ -289,7 +368,7 @@ Beispiel:: <tt>haml :index, :format => :html5</tt>
|
|
289
368
|
|
290
369
|
Abhängigkeit:: {erubis}[http://www.kuwata-lab.com/erubis/] oder
|
291
370
|
erb (included in Ruby)
|
292
|
-
Dateierweiterungs:: <tt>.erb</tt>, <tt>.rhtml</tt> oder <tt>.erubis</tt>
|
371
|
+
Dateierweiterungs:: <tt>.erb</tt>, <tt>.rhtml</tt> oder <tt>.erubis</tt>
|
293
372
|
(nur Erubis)
|
294
373
|
Beispiel:: <tt>erb :index</tt>
|
295
374
|
|
@@ -333,8 +412,8 @@ Abhängigkeit:: {liquid}[http://www.liquidmarkup.org/]
|
|
333
412
|
Dateierweiterungs:: <tt>.liquid</tt>
|
334
413
|
Beispiel:: <tt>liquid :index, :locals => { :key => 'Wert' }</tt>
|
335
414
|
|
336
|
-
Da man aus dem Liquid-Template heraus keine Ruby-Methoden aufrufen kann
|
337
|
-
(ausgenommen +yield+), wird man üblicherweise locals verwenden wollen, mit
|
415
|
+
Da man aus dem Liquid-Template heraus keine Ruby-Methoden aufrufen kann
|
416
|
+
(ausgenommen +yield+), wird man üblicherweise locals verwenden wollen, mit
|
338
417
|
denen man Variablen weitergibt.
|
339
418
|
|
340
419
|
=== Markdown Templates
|
@@ -357,11 +436,11 @@ Beachte, dass man die +markdown+-Methode auch aus anderen Templates heraus
|
|
357
436
|
aufrufen kann:
|
358
437
|
|
359
438
|
%h1 Gruß von Haml!
|
360
|
-
%p= markdown(:
|
439
|
+
%p= markdown(:Grüße)
|
361
440
|
|
362
441
|
Da man Ruby nicht von Markdown heraus aufrufen kann, können auch Layouts nicht
|
363
|
-
in Markdown geschrieben werden. Es ist aber möglich, einen Renderer für die
|
364
|
-
Templates zu verwenden und einen anderen für das Layout, indem die
|
442
|
+
in Markdown geschrieben werden. Es ist aber möglich, einen Renderer für die
|
443
|
+
Templates zu verwenden und einen anderen für das Layout, indem die
|
365
444
|
<tt>:layout_engine</tt>-Option verwendet wird.
|
366
445
|
|
367
446
|
=== Textile Templates
|
@@ -380,11 +459,11 @@ Beachte, dass man die +textile+-Methode auch aus anderen Templates heraus
|
|
380
459
|
aufrufen kann:
|
381
460
|
|
382
461
|
%h1 Gruß von Haml!
|
383
|
-
%p= textile(:
|
462
|
+
%p= textile(:Grüße)
|
384
463
|
|
385
464
|
Da man Ruby nicht von Textile heraus aufrufen kann, können auch Layouts nicht
|
386
|
-
in Textile geschrieben werden. Es ist aber möglich, einen Renderer für die
|
387
|
-
Templates zu verwenden und einen anderen für das Layout, indem die
|
465
|
+
in Textile geschrieben werden. Es ist aber möglich, einen Renderer für die
|
466
|
+
Templates zu verwenden und einen anderen für das Layout, indem die
|
388
467
|
<tt>:layout_engine</tt>-Option verwendet wird.
|
389
468
|
|
390
469
|
=== RDoc Templates
|
@@ -406,8 +485,8 @@ aufrufen kann:
|
|
406
485
|
%p= rdoc(:Grüße)
|
407
486
|
|
408
487
|
Da man Ruby nicht von RDoc heraus aufrufen kann, können auch Layouts nicht
|
409
|
-
in RDoc geschrieben werden. Es ist aber möglich, einen Renderer für die
|
410
|
-
Templates zu verwenden und einen anderen für das Layout, indem die
|
488
|
+
in RDoc geschrieben werden. Es ist aber möglich, einen Renderer für die
|
489
|
+
Templates zu verwenden und einen anderen für das Layout, indem die
|
411
490
|
<tt>:layout_engine</tt>-Option verwendet wird.
|
412
491
|
|
413
492
|
=== Radius Templates
|
@@ -452,8 +531,8 @@ aufrufen kann:
|
|
452
531
|
%p= creole(:Grüße)
|
453
532
|
|
454
533
|
Da man Ruby nicht von Creole heraus aufrufen kann, können auch Layouts nicht
|
455
|
-
in Creole geschrieben werden. Es ist aber möglich, einen Renderer für die
|
456
|
-
Templates zu verwenden und einen anderen für das Layout, indem die
|
534
|
+
in Creole geschrieben werden. Es ist aber möglich, einen Renderer für die
|
535
|
+
Templates zu verwenden und einen anderen für das Layout, indem die
|
457
536
|
<tt>:layout_engine</tt>-Option verwendet wird.
|
458
537
|
|
459
538
|
=== CoffeeScript Templates
|
@@ -473,7 +552,7 @@ Rendert den eingebetteten Template-String.
|
|
473
552
|
|
474
553
|
=== Auf Variablen in Templates zugreifen
|
475
554
|
|
476
|
-
Templates werden in demselben Kontext ausgeführt wie Routen. Instanzvariablen
|
555
|
+
Templates werden in demselben Kontext ausgeführt wie Routen. Instanzvariablen
|
477
556
|
in Routen sind auch direkt im Template verfügbar:
|
478
557
|
|
479
558
|
get '/:id' do
|
@@ -512,7 +591,7 @@ Templates können auch am Ende der Datei definiert werden:
|
|
512
591
|
|
513
592
|
Anmerkung: Inline-Templates, die in der Datei definiert sind, die <tt>require
|
514
593
|
'sinatra'</tt> aufruft, werden automatisch geladen. Um andere Inline-Templates
|
515
|
-
in anderen Dateien aufzurufen, muss explizit <tt>enable :inline_templates</tt>
|
594
|
+
in anderen Dateien aufzurufen, muss explizit <tt>enable :inline_templates</tt>
|
516
595
|
verwendet werden.
|
517
596
|
|
518
597
|
=== Benannte Templates
|
@@ -533,7 +612,7 @@ werden:
|
|
533
612
|
end
|
534
613
|
|
535
614
|
Wenn ein Template mit dem Namen "layout" existiert, wird es bei jedem Aufruf
|
536
|
-
verwendet. Durch <tt>:layout => false</tt> kann das Ausführen verhindert
|
615
|
+
verwendet. Durch <tt>:layout => false</tt> kann das Ausführen verhindert
|
537
616
|
werden:
|
538
617
|
|
539
618
|
get '/' do
|
@@ -542,16 +621,16 @@ werden:
|
|
542
621
|
|
543
622
|
=== Dateiendungen zuordnen
|
544
623
|
|
545
|
-
Um eine Dateiendung einer Template-Engine zuzuordnen, kann
|
546
|
-
<tt>Tilt.register</tt> genutzt werden. Wenn etwa die Dateiendung +tt+ für
|
547
|
-
Textile-Templates genutzt werden soll, lässt sich dies wie folgt
|
624
|
+
Um eine Dateiendung einer Template-Engine zuzuordnen, kann
|
625
|
+
<tt>Tilt.register</tt> genutzt werden. Wenn etwa die Dateiendung +tt+ für
|
626
|
+
Textile-Templates genutzt werden soll, lässt sich dies wie folgt
|
548
627
|
bewerkstelligen:
|
549
628
|
|
550
629
|
Tilt.register :tt, Tilt[:textile]
|
551
630
|
|
552
631
|
=== Eine eigene Template-Engine hinzufügen
|
553
632
|
|
554
|
-
Zu allererst muss die Engine bei Tilt registriert und danach eine
|
633
|
+
Zu allererst muss die Engine bei Tilt registriert und danach eine
|
555
634
|
Rendering-Methode erstellt werden:
|
556
635
|
|
557
636
|
Tilt.register :mtt, MeineTolleTemplateEngine
|
@@ -565,12 +644,12 @@ Rendering-Methode erstellt werden:
|
|
565
644
|
end
|
566
645
|
|
567
646
|
Dieser Code rendert <tt>./views/application.mtt</tt>. Siehe
|
568
|
-
github.com/rtomayko/tilt[https://github.com/rtomayko/tilt], um mehr über Tilt
|
647
|
+
github.com/rtomayko/tilt[https://github.com/rtomayko/tilt], um mehr über Tilt
|
569
648
|
zu lernen.
|
570
649
|
|
571
650
|
== Filter
|
572
651
|
|
573
|
-
Before-Filter werden vor jedem Request in demselben Kontext, wie danach die
|
652
|
+
Before-Filter werden vor jedem Request in demselben Kontext, wie danach die
|
574
653
|
Routen, ausgeführt. So können etwa Request und Antwort geändert werden.
|
575
654
|
Gesetzte Instanzvariablen in Filtern können in Routen und Templates verwendet
|
576
655
|
werden:
|
@@ -610,7 +689,7 @@ werden:
|
|
610
689
|
before :agent => /Songbird/ do
|
611
690
|
# ...
|
612
691
|
end
|
613
|
-
|
692
|
+
|
614
693
|
after '/blog/*', :host_name => 'example.com' do
|
615
694
|
# ...
|
616
695
|
end
|
@@ -731,7 +810,7 @@ anderen Route gefordert wird. Um das zu erreichen, lässt sich +call+ nutzen:
|
|
731
810
|
end
|
732
811
|
|
733
812
|
Beachte, dass in dem oben angegeben Beispiel die Performance erheblich erhöht
|
734
|
-
werden kann, wenn <tt>"bar"</tt> in eine Helfer-Methode umgewandelt wird, auf
|
813
|
+
werden kann, wenn <tt>"bar"</tt> in eine Helfer-Methode umgewandelt wird, auf
|
735
814
|
die <tt>/foo</tt> und <tt>/bar</tt> zugreifen können.
|
736
815
|
|
737
816
|
Wenn der Request innerhalb derselben Applikations-Instanz aufgerufen und keine
|
@@ -751,13 +830,13 @@ verwendet, lässt sich der Body jederzeit über diese Methode aufrufen:
|
|
751
830
|
get '/foo' do
|
752
831
|
body "bar"
|
753
832
|
end
|
754
|
-
|
833
|
+
|
755
834
|
after do
|
756
835
|
puts body
|
757
836
|
end
|
758
837
|
|
759
838
|
Ebenso ist es möglich, einen Block an +body+ weiterzureichen, der dann vom
|
760
|
-
Rack-Handler ausgeführt wird (lässt sich z.B. zur Umsetzung von Streaming
|
839
|
+
Rack-Handler ausgeführt wird (lässt sich z.B. zur Umsetzung von Streaming
|
761
840
|
einsetzen, siehe auch "Rückgabewerte").
|
762
841
|
|
763
842
|
Vergleichbar mit +body+ lassen sich auch Status-Code und Header setzen:
|
@@ -775,10 +854,10 @@ Argumente den aktuellen Wert aus.
|
|
775
854
|
|
776
855
|
=== Response-Streams
|
777
856
|
|
778
|
-
In manchen Situationen sollen Daten bereits an den Client zurückgeschickt
|
779
|
-
werden, bevor ein vollständiger Response bereit steht. Manchmal will man die
|
780
|
-
Verbindung auch erst dann beenden und Daten so lange an den Client
|
781
|
-
zurückschicken, bis er die Verbindung abbricht. Für diese Fälle gibt es die
|
857
|
+
In manchen Situationen sollen Daten bereits an den Client zurückgeschickt
|
858
|
+
werden, bevor ein vollständiger Response bereit steht. Manchmal will man die
|
859
|
+
Verbindung auch erst dann beenden und Daten so lange an den Client
|
860
|
+
zurückschicken, bis er die Verbindung abbricht. Für diese Fälle gibt es die
|
782
861
|
+stream+-Helfer-Methode, die es einem erspart eigene Lösungen zu schreiben:
|
783
862
|
|
784
863
|
get '/' do
|
@@ -791,20 +870,22 @@ zurückschicken, bis er die Verbindung abbricht. Für diese Fälle gibt es die
|
|
791
870
|
end
|
792
871
|
end
|
793
872
|
|
794
|
-
Damit lassen sich Streaming-APIs realisieren, sog.
|
795
|
-
|
796
|
-
Ebenso können sie
|
797
|
-
|
873
|
+
Damit lassen sich Streaming-APIs realisieren, sog.
|
874
|
+
{Server Sent Events}[http://dev.w3.org/html5/eventsource/] die als Basis für
|
875
|
+
{WebSockets}[http://en.wikipedia.org/wiki/WebSocket] dienen. Ebenso können sie
|
876
|
+
verwendet werden, um den Durchsatz zu erhöhen, wenn ein Teil der Daten von
|
877
|
+
langsamen Ressourcen abhängig ist.
|
798
878
|
|
799
879
|
Es ist zu beachten, dass das Verhalten beim Streaming, insbesondere die Anzahl
|
800
|
-
nebenläufiger Anfragen, stark davon abhängt, welcher Webserver für die
|
880
|
+
nebenläufiger Anfragen, stark davon abhängt, welcher Webserver für die
|
801
881
|
Applikation verwendet wird. Einige Server, z.B. WEBRick, unterstützen Streaming
|
802
882
|
nicht oder nur teilweise. Sollte der Server Streaming nicht unterstützen, wird
|
803
|
-
ein vollständiger Response-Body zurückgeschickt, sobald der an +stream+
|
804
|
-
weitergegebene Block abgearbeitet ist.
|
883
|
+
ein vollständiger Response-Body zurückgeschickt, sobald der an +stream+
|
884
|
+
weitergegebene Block abgearbeitet ist. Mit Shotgun funktioniert Streaming z.B.
|
885
|
+
überhaupt nicht.
|
805
886
|
|
806
887
|
Ist der optionale Parameter +keep_open+ aktiviert, wird beim gestreamten Objekt
|
807
|
-
+close+ nicht aufgerufen und es ist einem überlassen dies an einem beliebigen
|
888
|
+
+close+ nicht aufgerufen und es ist einem überlassen dies an einem beliebigen
|
808
889
|
späteren Zeitpunkt nachholen. Die Funktion ist jedoch nur bei Event-gesteuerten
|
809
890
|
Serven wie Thin oder Rainbows möglich, andere Server werden trotzdem den Stream
|
810
891
|
beenden:
|
@@ -822,7 +903,7 @@ beenden:
|
|
822
903
|
connections.each { |out| out << params[:message] << "\n" }
|
823
904
|
"Nachricht verschickt"
|
824
905
|
end
|
825
|
-
|
906
|
+
|
826
907
|
=== Logger
|
827
908
|
|
828
909
|
Im Geltungsbereich eines Request stellt die +logger+ Helfer-Methode eine
|
@@ -842,11 +923,17 @@ voreingestellt ist. Wird über <tt>Sinatra::Base</tt> vererbt, muss es erst
|
|
842
923
|
aktiviert werden:
|
843
924
|
|
844
925
|
class MyApp < Sinatra::Base
|
845
|
-
configure
|
926
|
+
configure :production, :development do
|
846
927
|
enable :logging
|
847
928
|
end
|
848
929
|
end
|
849
930
|
|
931
|
+
Damit auch keine Middleware das Logging aktivieren kann, muss die +logging+
|
932
|
+
Einstellung auf +nil+ gesetzt werden. Das heißt aber auch, dass +logger+ in
|
933
|
+
diesem Fall +nil+ zurückgeben wird. Üblicherweise wird das eingesetzt, wenn ein
|
934
|
+
eigener Logger eingerichtet werden soll. Sinatra wird dann verwenden, was in
|
935
|
+
<tt>env['rack.logger']</tt> eingetragen ist.
|
936
|
+
|
850
937
|
== Mime-Types
|
851
938
|
|
852
939
|
Wenn <tt>send_file</tt> oder statische Dateien verwendet werden, kann es
|
@@ -856,7 +943,7 @@ vorkommen, dass Sinatra den Mime-Typ nicht kennt. Registriert wird dieser mit
|
|
856
943
|
configure do
|
857
944
|
mime_type :foo, 'text/foo'
|
858
945
|
end
|
859
|
-
|
946
|
+
|
860
947
|
Es kann aber auch der +content_type+-Helfer verwendet werden:
|
861
948
|
|
862
949
|
get '/' do
|
@@ -866,7 +953,7 @@ Es kann aber auch der +content_type+-Helfer verwendet werden:
|
|
866
953
|
|
867
954
|
=== URLs generieren
|
868
955
|
|
869
|
-
Zum Generieren von URLs sollte die +url+-Helfer-Methode genutzen werden, so
|
956
|
+
Zum Generieren von URLs sollte die +url+-Helfer-Methode genutzen werden, so
|
870
957
|
z.B. beim Einsatz von Haml:
|
871
958
|
|
872
959
|
%a{:href => url('/foo')} foo
|
@@ -890,7 +977,7 @@ Weitere Parameter werden wie Argumente der +halt+-Methode behandelt:
|
|
890
977
|
redirect to('/bar'), 303
|
891
978
|
redirect 'http://google.com', 'Hier bist du falsch'
|
892
979
|
|
893
|
-
Ebenso leicht lässt sich ein Schritt zurück mit dem Alias
|
980
|
+
Ebenso leicht lässt sich ein Schritt zurück mit dem Alias
|
894
981
|
<tt>redirect back</tt> erreichen:
|
895
982
|
|
896
983
|
get '/foo' do
|
@@ -910,12 +997,12 @@ Um Argumente an ein Redirect weiterzugeben, können sie entweder dem Query
|
|
910
997
|
oder eine Session verwendet werden:
|
911
998
|
|
912
999
|
enable :sessions
|
913
|
-
|
1000
|
+
|
914
1001
|
get '/foo' do
|
915
1002
|
session[:secret] = 'foo'
|
916
1003
|
redirect to('/bar')
|
917
1004
|
end
|
918
|
-
|
1005
|
+
|
919
1006
|
get '/bar' do
|
920
1007
|
session[:secret]
|
921
1008
|
end
|
@@ -964,23 +1051,42 @@ ebenso ist es möglich einen
|
|
964
1051
|
etag @article.sha1, :weak
|
965
1052
|
|
966
1053
|
Diese Helfer führen nicht das eigentliche Caching aus, sondern geben die dafür
|
967
|
-
notwendigen Informationen an den Cache weiter. Für schnelle Reverse-Proxy
|
968
|
-
Cache-Lösungen bietet sich z.B.
|
1054
|
+
notwendigen Informationen an den Cache weiter. Für schnelle Reverse-Proxy
|
1055
|
+
Cache-Lösungen bietet sich z.B.
|
969
1056
|
{rack-cache}[http://rtomayko.github.com/rack-cache/] an:
|
970
1057
|
|
971
1058
|
require "rack/cache"
|
972
1059
|
require "sinatra"
|
973
|
-
|
1060
|
+
|
974
1061
|
use Rack::Cache
|
975
|
-
|
1062
|
+
|
976
1063
|
get '/' do
|
977
1064
|
cache_control :public, :max_age => 36000
|
978
1065
|
sleep 5
|
979
1066
|
"hello"
|
980
1067
|
end
|
981
|
-
|
1068
|
+
|
982
1069
|
Um den <tt>Cache-Control</tt>-Header mit Informationen zu versorgen, verwendet
|
983
|
-
man die <tt>:static_cache_control</tt>-Einstellung (s.u.).
|
1070
|
+
man die <tt>:static_cache_control</tt>-Einstellung (s.u.).
|
1071
|
+
|
1072
|
+
Nach RFC 2616 sollte sich die Anwendung anders verhalten, wenn ein
|
1073
|
+
If-Match oder ein If-None_match Header auf <tt>*</tt> gesetzt wird in
|
1074
|
+
Abhängigkeit davon, ob die Resource bereits existiert. Sinatra geht
|
1075
|
+
davon aus, dass Ressourcen bei sicheren Anfragen (z.B. bei get oder Idempotenten
|
1076
|
+
Anfragen wie put) bereits existieren, wobei anderen Ressourcen
|
1077
|
+
(besipielsweise bei post), als neue Ressourcen behandelt werden. Dieses
|
1078
|
+
Verhalten lässt sich mit der <tt>:new_resource</tt> Option ändern:
|
1079
|
+
|
1080
|
+
get '/create' do
|
1081
|
+
etag '', :new_resource => true
|
1082
|
+
Article.create
|
1083
|
+
erb :new_article
|
1084
|
+
end
|
1085
|
+
|
1086
|
+
Soll das schwache ETag trotzdem verwendet werden, verwendet man die
|
1087
|
+
<tt>:kind</tt> Option:
|
1088
|
+
|
1089
|
+
etag '', :new_resource => true, :kind => :weak
|
984
1090
|
|
985
1091
|
=== Dateien versenden
|
986
1092
|
|
@@ -1004,7 +1110,7 @@ Für <tt>send_file</tt> stehen einige Hash-Optionen zur Verfügung:
|
|
1004
1110
|
[type]
|
1005
1111
|
Content-Type, der verwendet werden soll. Wird, wenn nicht angegeben, von der
|
1006
1112
|
Dateiendung abgeleitet.
|
1007
|
-
|
1113
|
+
|
1008
1114
|
[disposition]
|
1009
1115
|
Verwendet für Content-Disposition. Mögliche Werte sind: +nil+ (Standard),
|
1010
1116
|
<tt>:attachment</tt> und <tt>:inline</tt>.
|
@@ -1057,7 +1163,7 @@ Manche Optionen, wie etwa <tt>script_name</tt> oder <tt>path_info</tt>, sind
|
|
1057
1163
|
auch schreibbar:
|
1058
1164
|
|
1059
1165
|
before { request.path_info = "/" }
|
1060
|
-
|
1166
|
+
|
1061
1167
|
get "/" do
|
1062
1168
|
"Alle Anfragen kommen hier an!"
|
1063
1169
|
end
|
@@ -1089,8 +1195,8 @@ Ebenso kann eine Dateiname als Parameter hinzugefügt werden:
|
|
1089
1195
|
|
1090
1196
|
=== Umgang mit Datum und Zeit
|
1091
1197
|
|
1092
|
-
Sinatra bietet eine <tt>time_for</tt>-Helfer-Methode, die aus einem gegebenen
|
1093
|
-
Wert ein Time-Objekt generiert. Ebenso kann sie nach +DateTime+, +Date+ und
|
1198
|
+
Sinatra bietet eine <tt>time_for</tt>-Helfer-Methode, die aus einem gegebenen
|
1199
|
+
Wert ein Time-Objekt generiert. Ebenso kann sie nach +DateTime+, +Date+ und
|
1094
1200
|
ähnliche Klassen konvertieren:
|
1095
1201
|
|
1096
1202
|
get '/' do
|
@@ -1099,7 +1205,7 @@ Wert ein Time-Objekt generiert. Ebenso kann sie nach +DateTime+, +Date+ und
|
|
1099
1205
|
end
|
1100
1206
|
|
1101
1207
|
Diese Methode wird intern für +expires, +last_modiefied+ und Freunde verwendet.
|
1102
|
-
Mit ein paar Handgriffen lässt sich diese Methode also in ihrem Verhalten
|
1208
|
+
Mit ein paar Handgriffen lässt sich diese Methode also in ihrem Verhalten
|
1103
1209
|
erweitern, indem man +time_for+ in der eigenen Applikation überschreibt:
|
1104
1210
|
|
1105
1211
|
helpers do
|
@@ -1117,7 +1223,7 @@ erweitern, indem man +time_for+ in der eigenen Applikation überschreibt:
|
|
1117
1223
|
expires :tomorrow
|
1118
1224
|
"Hallo"
|
1119
1225
|
end
|
1120
|
-
|
1226
|
+
|
1121
1227
|
=== Nachschlagen von Template-Dateien
|
1122
1228
|
|
1123
1229
|
Die <tt>find_template</tt>-Helfer-Methode wird genutzt, um Template-Dateien zum
|
@@ -1170,16 +1276,16 @@ Wird einmal beim Starten in jedweder Umgebung ausgeführt:
|
|
1170
1276
|
configure do
|
1171
1277
|
# setze eine Option
|
1172
1278
|
set :option, 'wert'
|
1173
|
-
|
1279
|
+
|
1174
1280
|
# setze mehrere Optionen
|
1175
1281
|
set :a => 1, :b => 2
|
1176
|
-
|
1282
|
+
|
1177
1283
|
# das gleiche wie `set :option, true`
|
1178
1284
|
enable :option
|
1179
|
-
|
1285
|
+
|
1180
1286
|
# das gleiche wie `set :option, false`
|
1181
1287
|
disable :option
|
1182
|
-
|
1288
|
+
|
1183
1289
|
# dynamische Einstellungen mit Blöcken
|
1184
1290
|
set(:css_dir) { File.join(views, 'css') }
|
1185
1291
|
end
|
@@ -1212,10 +1318,10 @@ Diese Einstellungen sind über +settings+ erreichbar:
|
|
1212
1318
|
|
1213
1319
|
=== Einstellung des Angriffsschutzes
|
1214
1320
|
|
1215
|
-
Sinatra verwendet
|
1321
|
+
Sinatra verwendet
|
1216
1322
|
{Rack::Protection}[https://github.com/rkh/rack-protection#readme], um die
|
1217
1323
|
Anwendung vor häufig vorkommenden Angriffen zu schützen. Diese Voreinstellung
|
1218
|
-
lässt sich selbstverständlich auch deaktivieren, z.B. um
|
1324
|
+
lässt sich selbstverständlich auch deaktivieren, z.B. um
|
1219
1325
|
Geschwindigkeitsvorteile zu gewinnen:
|
1220
1326
|
|
1221
1327
|
disable :protection
|
@@ -1225,42 +1331,41 @@ einen Hash mit Optionen hinzu:
|
|
1225
1331
|
|
1226
1332
|
set :protection, :except => :path_traversal
|
1227
1333
|
|
1228
|
-
Neben Strings akzeptiert <tt>:except</tt> auch Arrays, um gleich mehrere
|
1334
|
+
Neben Strings akzeptiert <tt>:except</tt> auch Arrays, um gleich mehrere
|
1229
1335
|
Schutzmechanismen zu deaktivieren:
|
1230
1336
|
|
1231
|
-
set :
|
1232
|
-
|
1337
|
+
set :protection, :except => [:path_traversal, :session_hijacking]
|
1338
|
+
|
1233
1339
|
=== Mögliche Einstellungen
|
1234
1340
|
|
1235
1341
|
[absolute_redirects] Wenn ausgeschaltet, wird Sinatra relative Redirects
|
1236
|
-
zulassen. Jedoch ist Sinatra dann nicht mehr mit RFC
|
1237
|
-
2616 (HTTP 1.1) konform, das nur absolute Redirects
|
1342
|
+
zulassen. Jedoch ist Sinatra dann nicht mehr mit RFC
|
1343
|
+
2616 (HTTP 1.1) konform, das nur absolute Redirects
|
1238
1344
|
zulässt.
|
1239
1345
|
|
1240
1346
|
Sollte eingeschaltet werden, wenn die Applikation
|
1241
|
-
hinter einem Reverse-Proxy liegt, der nicht ordentlich
|
1242
|
-
eingerichtet ist. Beachte, dass die
|
1243
|
-
+url+-Helfer-Methode nach wie vor absolute URLs
|
1244
|
-
erstellen wird, es sei denn, es wird als zweiter
|
1347
|
+
hinter einem Reverse-Proxy liegt, der nicht ordentlich
|
1348
|
+
eingerichtet ist. Beachte, dass die
|
1349
|
+
+url+-Helfer-Methode nach wie vor absolute URLs
|
1350
|
+
erstellen wird, es sei denn, es wird als zweiter
|
1245
1351
|
Parameter +false+ angegeben.
|
1246
1352
|
|
1247
1353
|
Standardmäßig nicht aktiviert.
|
1248
|
-
|
1249
1354
|
|
1250
1355
|
[add_charsets] Mime-Types werden hier automatisch der Helfer-Methode
|
1251
1356
|
<tt>content_type</tt> zugeordnet.
|
1252
|
-
|
1357
|
+
|
1253
1358
|
Es empfielt sich, Werte hinzuzufügen statt sie zu
|
1254
1359
|
überschreiben:
|
1255
|
-
|
1360
|
+
|
1256
1361
|
settings.add_charsets << "application/foobar"
|
1257
1362
|
|
1258
|
-
[app_file] Hauptdatei der Applikation. Wird verwendet, um
|
1259
|
-
Wurzel-, Inline-, View- und öffentliche Verzeichnis
|
1260
|
-
Projekts festzustellen.
|
1261
|
-
|
1262
|
-
[bind] IP-Address, an die gebunden wird
|
1263
|
-
(Standardwert: 0.0.0.0). Wird nur für den eingebauten
|
1363
|
+
[app_file] Pfad zur Hauptdatei der Applikation. Wird verwendet, um
|
1364
|
+
das Wurzel-, Inline-, View- und öffentliche Verzeichnis
|
1365
|
+
des Projekts festzustellen.
|
1366
|
+
|
1367
|
+
[bind] IP-Address, an die gebunden wird
|
1368
|
+
(Standardwert: 0.0.0.0). Wird nur für den eingebauten
|
1264
1369
|
Server verwendet.
|
1265
1370
|
|
1266
1371
|
[default_encoding] Das Encoding, falls keines angegeben wurde.
|
@@ -1276,7 +1381,7 @@ Schutzmechanismen zu deaktivieren:
|
|
1276
1381
|
|
1277
1382
|
[lock] Jeder Request wird gelocked. Es kann nur ein Request
|
1278
1383
|
pro Ruby-Prozess gleichzeitig verarbeitet werden.
|
1279
|
-
|
1384
|
+
|
1280
1385
|
Eingeschaltet, wenn die Applikation threadsicher ist.
|
1281
1386
|
Standardmäßig nicht aktiviert.
|
1282
1387
|
|
@@ -1287,27 +1392,34 @@ Schutzmechanismen zu deaktivieren:
|
|
1287
1392
|
[port] Port für die Applikation. Wird nur im internen Server
|
1288
1393
|
verwendet.
|
1289
1394
|
|
1290
|
-
[prefixed_redirects] Entscheidet, ob <tt>request.script_name</tt> in
|
1291
|
-
Redirects eingefügt wird oder nicht, wenn kein
|
1292
|
-
absoluter Pfad angegeben ist. Auf diese Weise verhält
|
1395
|
+
[prefixed_redirects] Entscheidet, ob <tt>request.script_name</tt> in
|
1396
|
+
Redirects eingefügt wird oder nicht, wenn kein
|
1397
|
+
absoluter Pfad angegeben ist. Auf diese Weise verhält
|
1293
1398
|
sich <tt>redirect '/foo'</tt> so, als wäre es ein
|
1294
|
-
<tt>redirect to('/foo')</tt>. Standardmäßig nicht
|
1399
|
+
<tt>redirect to('/foo')</tt>. Standardmäßig nicht
|
1295
1400
|
aktiviert.
|
1296
|
-
|
1297
|
-
[protection] Legt fest, ob der Schutzmechanismus für häufig
|
1298
|
-
Vorkommende Webangriffe auf Webapplikationen aktiviert
|
1299
|
-
wird oder nicht. Weitere Informationen im vorhergehenden
|
1401
|
+
|
1402
|
+
[protection] Legt fest, ob der Schutzmechanismus für häufig
|
1403
|
+
Vorkommende Webangriffe auf Webapplikationen aktiviert
|
1404
|
+
wird oder nicht. Weitere Informationen im vorhergehenden
|
1300
1405
|
Abschnitt.
|
1301
1406
|
|
1302
1407
|
[public_folder] Das öffentliche Verzeichnis, aus dem Daten zur
|
1303
|
-
Verfügung gestellt werden können.
|
1408
|
+
Verfügung gestellt werden können. Wird nur dann
|
1409
|
+
verwendet, wenn statische Daten zur Verfügung
|
1410
|
+
gestellt werden können (s.u. <tt>static</tt>
|
1411
|
+
Option). Leitet sich von der <tt>app_file</tt>
|
1412
|
+
Einstellung ab, wenn nicht gesetzt.
|
1304
1413
|
|
1305
1414
|
[reload_templates] Im development-Modus aktiviert.
|
1306
1415
|
|
1307
|
-
[root] Wurzelverzeichnis des Projekts.
|
1416
|
+
[root] Wurzelverzeichnis des Projekts. Leitet sich von der
|
1417
|
+
<tt>app_file</tt> Einstellung ab, wenn nicht gesetzt.
|
1308
1418
|
|
1309
|
-
[raise_errors] Einen Ausnahmezustand aufrufen. Beendet die
|
1310
|
-
Applikation.
|
1419
|
+
[raise_errors] Einen Ausnahmezustand aufrufen. Beendet die
|
1420
|
+
Applikation. Ist automatisch aktiviert, wenn die
|
1421
|
+
Umgebung auf <tt>"test"</tt> eingestellt ist.
|
1422
|
+
Ansonsten ist diese Option deaktiviert.
|
1311
1423
|
|
1312
1424
|
[run] Wenn aktiviert, wird Sinatra versuchen, den Webserver
|
1313
1425
|
zu starten. Nicht verwenden, wenn Rackup oder anderes
|
@@ -1316,32 +1428,58 @@ Schutzmechanismen zu deaktivieren:
|
|
1316
1428
|
[running] Läuft der eingebaute Server? Diese Einstellung nicht
|
1317
1429
|
ändern!
|
1318
1430
|
|
1319
|
-
[server] Server oder Liste von Servern, die als eingebaute
|
1431
|
+
[server] Server oder Liste von Servern, die als eingebaute
|
1320
1432
|
Server zur Verfügung stehen.
|
1321
1433
|
Standardmäßig auf ['thin', 'mongrel', 'webrick']
|
1322
1434
|
voreingestellt. Die Anordnung gibt die Priorität vor.
|
1323
1435
|
|
1324
|
-
[sessions] Sessions auf Cookiebasis
|
1436
|
+
[sessions] Sessions auf Cookiebasis mittels
|
1437
|
+
<tt>Rack::Session::Cookie</tt>aktivieren. Für
|
1438
|
+
weitere Infos bitte in der Sektion 'Sessions
|
1439
|
+
verwenden' nachschauen.
|
1440
|
+
|
1441
|
+
[show_exceptions] Bei Fehlern einen Stacktrace im Browseranzeigen. Ist
|
1442
|
+
automatisch aktiviert, wenn die Umgebung auf
|
1443
|
+
<tt>"development"</tt> eingestellt ist. Ansonsten ist
|
1444
|
+
diese Option deaktiviert.
|
1325
1445
|
|
1326
|
-
[show_exceptions] Stacktrace im Browser bei Fehlern anzeigen.
|
1327
1446
|
|
1328
1447
|
[static] Entscheidet, ob Sinatra statische Dateien zur Verfügung
|
1329
1448
|
stellen soll oder nicht.
|
1330
|
-
Sollte nicht aktiviert werden, wenn ein Server
|
1331
|
-
verwendet wird, der dies auch selbstständig erledigen
|
1449
|
+
Sollte nicht aktiviert werden, wenn ein Server
|
1450
|
+
verwendet wird, der dies auch selbstständig erledigen
|
1332
1451
|
kann. Deaktivieren wird die Performance erhöhen.
|
1333
1452
|
Standardmäßig aktiviert.
|
1334
1453
|
|
1335
|
-
[static_cache_control] Wenn Sinatra statische Daten zur Verfügung stellt,
|
1336
|
-
können mit dieser Einstellung die +Cache-Control+
|
1337
|
-
Header zu den Responses hinzugefügt werden. Die
|
1454
|
+
[static_cache_control] Wenn Sinatra statische Daten zur Verfügung stellt,
|
1455
|
+
können mit dieser Einstellung die +Cache-Control+
|
1456
|
+
Header zu den Responses hinzugefügt werden. Die
|
1338
1457
|
Einstellung verwendet dazu die +cache_control+
|
1339
1458
|
Helfer-Methode. Standardmäßig deaktiviert.
|
1340
1459
|
Ein Array wird verwendet, um mehrere Werte gleichzeitig
|
1341
1460
|
zu übergeben:
|
1342
|
-
<tt>set :static_cache_control, [:public, :max_age => 300]</tt>
|
1461
|
+
<tt>set :static_cache_control, [:public, :max_age => 300]</tt>
|
1462
|
+
|
1463
|
+
[views] Verzeichnis der Views. Leitet sich von der
|
1464
|
+
<tt>app_file</tt> Einstellung ab, wenn nicht gesetzt.
|
1465
|
+
|
1466
|
+
== Umgebungen
|
1467
|
+
|
1468
|
+
Es gibt drei voreingestellte Umgebungen in Sinatra: <tt>"development"</tt>,
|
1469
|
+
<tt>"production"</tt> und <tt>"test"</tt>. Umgebungen können über die
|
1470
|
+
+RACK_ENV+ Umgebungsvariable gesetzt werden. Die Standardeinstellung ist
|
1471
|
+
<tt>"development"</tt>. In diesem Modus werden alle Templates zwischen
|
1472
|
+
Requests neu geladen. Dazu gibt es besondere Fehlerseiten für 404 Stati
|
1473
|
+
und Fehlermeldungen. In <tt>"production"</tt> und <tt>"test"</tt> werden
|
1474
|
+
Templates automatisch gecached.
|
1475
|
+
|
1476
|
+
Um die Anwendung in einer anderen Umgebung auszuführen kann man die
|
1477
|
+
<tt>-e</tt> Option verwenden:
|
1478
|
+
|
1479
|
+
ruby my_app.rb -e [ENVIRONMENT]
|
1343
1480
|
|
1344
|
-
|
1481
|
+
In der Anwendung kann man die die Methoden +development?+, +test?+ und
|
1482
|
+
+production?+ verwenden, um die aktuelle Umgebung zu erfahren.
|
1345
1483
|
|
1346
1484
|
== Fehlerbehandlung
|
1347
1485
|
|
@@ -1407,11 +1545,11 @@ der Development-Umgebung.
|
|
1407
1545
|
|
1408
1546
|
Sinatra baut auf Rack[http://rack.rubyforge.org/], einem minimalistischen
|
1409
1547
|
Standard-Interface für Ruby-Webframeworks. Eines der interessantesten
|
1410
|
-
Features für Entwickler ist der Support von Middlewares, die zwischen den
|
1548
|
+
Features für Entwickler ist der Support von Middlewares, die zwischen den
|
1411
1549
|
Server und die Anwendung geschaltet werden und so HTTP-Request und/oder Antwort
|
1412
1550
|
überwachen und/oder manipulieren können.
|
1413
1551
|
|
1414
|
-
Sinatra macht das Erstellen von Middleware-Verkettungen mit der
|
1552
|
+
Sinatra macht das Erstellen von Middleware-Verkettungen mit der
|
1415
1553
|
Top-Level-Methode +use+ zu einem Kinderspiel:
|
1416
1554
|
|
1417
1555
|
require 'sinatra'
|
@@ -1434,8 +1572,8 @@ Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html]-DSL
|
|
1434
1572
|
end
|
1435
1573
|
|
1436
1574
|
Rack bietet eine Vielzahl von Standard-Middlewares für Logging, Debugging,
|
1437
|
-
URL-Routing, Authentifizierung und Session-Verarbeitung. Sinatra verwendet
|
1438
|
-
viele von diesen Komponenten automatisch, abhängig von der Konfiguration. So
|
1575
|
+
URL-Routing, Authentifizierung und Session-Verarbeitung. Sinatra verwendet
|
1576
|
+
viele von diesen Komponenten automatisch, abhängig von der Konfiguration. So
|
1439
1577
|
muss +use+ häufig nicht explizit verwendet werden.
|
1440
1578
|
|
1441
1579
|
Hilfreiche Middleware gibt es z.B. hier:
|
@@ -1479,14 +1617,14 @@ wird empfohlen:
|
|
1479
1617
|
|
1480
1618
|
== Sinatra::Base - Middleware, Bibliotheken und modulare Anwendungen
|
1481
1619
|
|
1482
|
-
Das Definieren einer Top-Level-Anwendung funktioniert gut für
|
1483
|
-
Mikro-Anwendungen, hat aber Nachteile, wenn wiederverwendbare Komponenten wie
|
1620
|
+
Das Definieren einer Top-Level-Anwendung funktioniert gut für
|
1621
|
+
Mikro-Anwendungen, hat aber Nachteile, wenn wiederverwendbare Komponenten wie
|
1484
1622
|
Middleware, Rails Metal, einfache Bibliotheken mit Server-Komponenten oder auch
|
1485
1623
|
Sinatra-Erweiterungen geschrieben werden sollen.
|
1486
1624
|
|
1487
|
-
|
1488
|
-
|
1489
|
-
und <tt>./views</tt> Ordner, Logging, Exception-Detail-Seite, usw.). Genau
|
1625
|
+
Das Top-Level geht von einer Konfiguration für eine Mikro-Anwendung aus
|
1626
|
+
(wie sie z.B. bei einer einzelnen Anwendungsdatei, <tt>./public</tt>
|
1627
|
+
und <tt>./views</tt> Ordner, Logging, Exception-Detail-Seite, usw.). Genau
|
1490
1628
|
hier kommt <tt>Sinatra::Base</tt> ins Spiel:
|
1491
1629
|
|
1492
1630
|
require 'sinatra/base'
|
@@ -1502,13 +1640,13 @@ hier kommt <tt>Sinatra::Base</tt> ins Spiel:
|
|
1502
1640
|
|
1503
1641
|
Die MyApp-Klasse ist eine unabhängige Rack-Komponente, die als Middleware,
|
1504
1642
|
Endpunkt oder via Rails Metal verwendet werden kann. Verwendet wird sie durch
|
1505
|
-
+use+ oder +run+ von einer Rackup-<tt>config.ru</tt>-Datei oder als
|
1643
|
+
+use+ oder +run+ von einer Rackup-<tt>config.ru</tt>-Datei oder als
|
1506
1644
|
Server-Komponente einer Bibliothek:
|
1507
1645
|
|
1508
1646
|
MyApp.run! :host => 'localhost', :port => 9090
|
1509
1647
|
|
1510
1648
|
Die Methoden der <tt>Sinatra::Base</tt>-Subklasse sind genau dieselben wie die
|
1511
|
-
der Top-Level-DSL. Die meisten Top-Level-Anwendungen können mit nur zwei
|
1649
|
+
der Top-Level-DSL. Die meisten Top-Level-Anwendungen können mit nur zwei
|
1512
1650
|
Veränderungen zu <tt>Sinatra::Base</tt> konvertiert werden:
|
1513
1651
|
|
1514
1652
|
* Die Datei sollte <tt>require 'sinatra/base'</tt> anstelle von
|
@@ -1528,20 +1666,14 @@ Entgegen häufiger Meinungen gibt es nichts gegen den klassischen Stil
|
|
1528
1666
|
einzuwenden. Solange es die Applikation nicht beeinträchtigt, besteht kein
|
1529
1667
|
Grund, eine modulare Applikation zu erstellen.
|
1530
1668
|
|
1531
|
-
|
1669
|
+
Der größte Nachteil der klassischen Sinatra Anwendung gegenüber einer modularen
|
1670
|
+
ist die Einschränkung auf eine Sinatra Anwendung pro Ruby-Prozess. Sollen
|
1671
|
+
mehrere zum Einsatz kommen, muss auf den modularen Stil umgestiegen werden.
|
1672
|
+
Dabei ist es kein Problem klassische und modulare Anwendungen miteinander zu
|
1673
|
+
vermischen.
|
1532
1674
|
|
1533
|
-
|
1534
|
-
|
1535
|
-
|
1536
|
-
* Der klassische Stil füllt Object mit Delegations-Methoden. Sollte die
|
1537
|
-
Applikation als Gem/Bibliothek zum Einsatz kommen, sollte auf den modularen
|
1538
|
-
Stil umgestiegen werden.
|
1539
|
-
|
1540
|
-
Es gibt keinen Grund, warum modulare und klassische Elemente nicht
|
1541
|
-
vermischt werden sollten.
|
1542
|
-
|
1543
|
-
Will man jedoch von einem Stil auf den anderen umsteigen, sollten einige
|
1544
|
-
Unterschiede beachtet werden:
|
1675
|
+
Bei einem Umstieg, sollten einige Unterschiede in den Einstellungen beachtet
|
1676
|
+
werden:
|
1545
1677
|
|
1546
1678
|
Szenario Classic Modular
|
1547
1679
|
|
@@ -1558,10 +1690,10 @@ Es gibt zwei übliche Wege, eine modulare Anwendung zu starten. Zum einen über
|
|
1558
1690
|
|
1559
1691
|
# mein_app.rb
|
1560
1692
|
require 'sinatra/base'
|
1561
|
-
|
1693
|
+
|
1562
1694
|
class MeinApp < Sinatra::Base
|
1563
1695
|
# ... Anwendungscode hierhin ...
|
1564
|
-
|
1696
|
+
|
1565
1697
|
# starte den Server, wenn die Ruby-Datei direkt ausgeführt wird
|
1566
1698
|
run! if app_file == $0
|
1567
1699
|
end
|
@@ -1587,7 +1719,7 @@ Schreibe eine Anwendungsdatei:
|
|
1587
1719
|
|
1588
1720
|
# app.rb
|
1589
1721
|
require 'sinatra'
|
1590
|
-
|
1722
|
+
|
1591
1723
|
get '/' do
|
1592
1724
|
'Hallo Welt!'
|
1593
1725
|
end
|
@@ -1607,15 +1739,15 @@ Anzeichen dafür, dass eine <tt>config.ru</tt>-Datei gebraucht wird:
|
|
1607
1739
|
* Sinatra soll als Middleware verwendet werden, nicht als Endpunkt.
|
1608
1740
|
|
1609
1741
|
<b>Es gibt keinen Grund, eine <tt>config.ru</tt>-Datei zu verwenden, nur weil
|
1610
|
-
eine Anwendung im modularen Stil betrieben werden soll. Ebenso wird keine
|
1611
|
-
Anwendung mit modularem Stil benötigt, um eine <tt>config.ru</tt>-Datei zu
|
1742
|
+
eine Anwendung im modularen Stil betrieben werden soll. Ebenso wird keine
|
1743
|
+
Anwendung mit modularem Stil benötigt, um eine <tt>config.ru</tt>-Datei zu
|
1612
1744
|
verwenden.</b>
|
1613
1745
|
|
1614
1746
|
=== Sinatra als Middleware nutzen
|
1615
1747
|
|
1616
1748
|
Es ist nicht nur möglich, andere Rack-Middleware mit Sinatra zu nutzen, es kann
|
1617
|
-
außerdem jede Sinatra-Anwendung selbst als Middleware vor jeden beliebigen
|
1618
|
-
Rack-Endpunkt gehangen werden. Bei diesem Endpunkt muss es sich nicht um eine
|
1749
|
+
außerdem jede Sinatra-Anwendung selbst als Middleware vor jeden beliebigen
|
1750
|
+
Rack-Endpunkt gehangen werden. Bei diesem Endpunkt muss es sich nicht um eine
|
1619
1751
|
andere Sinatra-Anwendung handeln, es kann jede andere Rack-Anwendung sein
|
1620
1752
|
(Rails/Ramaze/Camping/...):
|
1621
1753
|
|
@@ -1623,9 +1755,9 @@ andere Sinatra-Anwendung handeln, es kann jede andere Rack-Anwendung sein
|
|
1623
1755
|
|
1624
1756
|
class LoginScreen < Sinatra::Base
|
1625
1757
|
enable :sessions
|
1626
|
-
|
1758
|
+
|
1627
1759
|
get('/login') { haml :login }
|
1628
|
-
|
1760
|
+
|
1629
1761
|
post('/login') do
|
1630
1762
|
if params[:name] == 'admin' && params[:password] == 'admin'
|
1631
1763
|
session['user_name'] = params[:name]
|
@@ -1638,20 +1770,20 @@ andere Sinatra-Anwendung handeln, es kann jede andere Rack-Anwendung sein
|
|
1638
1770
|
class MyApp < Sinatra::Base
|
1639
1771
|
# Middleware wird vor Filtern ausgeführt
|
1640
1772
|
use LoginScreen
|
1641
|
-
|
1773
|
+
|
1642
1774
|
before do
|
1643
1775
|
unless session['user_name']
|
1644
1776
|
halt "Zugriff verweigert, bitte <a href='/login'>einloggen</a>."
|
1645
1777
|
end
|
1646
1778
|
end
|
1647
|
-
|
1779
|
+
|
1648
1780
|
get('/') { "Hallo #{session['user_name']}." }
|
1649
1781
|
end
|
1650
1782
|
|
1651
1783
|
=== Dynamische Applikationserstellung
|
1652
1784
|
|
1653
1785
|
Manche Situationen erfordern die Erstellung neuer Applikationen zur Laufzeit,
|
1654
|
-
ohne dass sie einer Konstanten zugeordnet werden. Dies lässt sich mit
|
1786
|
+
ohne dass sie einer Konstanten zugeordnet werden. Dies lässt sich mit
|
1655
1787
|
<tt>Sinatra.new</tt> erreichen:
|
1656
1788
|
|
1657
1789
|
require 'sinatra/base'
|
@@ -1698,10 +1830,10 @@ Verfügung stehen.
|
|
1698
1830
|
|
1699
1831
|
Jede Sinatra-Anwendung entspricht einer <tt>Sinatra::Base</tt>-Subklasse. Falls
|
1700
1832
|
die Top- Level-DSL verwendet wird (<tt>require 'sinatra'</tt>), handelt es sich
|
1701
|
-
um <tt>Sinatra::Application</tt>, andernfalls ist es jene Subklasse, die
|
1702
|
-
explizit angelegt wurde. Auf Klassenebene stehen Methoden wie +get+ oder
|
1703
|
-
+before+ zur Verfügung, es gibt aber keinen Zugriff auf das +request+-Object
|
1704
|
-
oder die +session+, da nur eine einzige Klasse für alle eingehenden Anfragen
|
1833
|
+
um <tt>Sinatra::Application</tt>, andernfalls ist es jene Subklasse, die
|
1834
|
+
explizit angelegt wurde. Auf Klassenebene stehen Methoden wie +get+ oder
|
1835
|
+
+before+ zur Verfügung, es gibt aber keinen Zugriff auf das +request+-Object
|
1836
|
+
oder die +session+, da nur eine einzige Klasse für alle eingehenden Anfragen
|
1705
1837
|
genutzt wird.
|
1706
1838
|
|
1707
1839
|
Optionen, die via +set+ gesetzt werden, sind Methoden auf Klassenebene:
|
@@ -1710,7 +1842,7 @@ Optionen, die via +set+ gesetzt werden, sind Methoden auf Klassenebene:
|
|
1710
1842
|
# Hey, ich bin im Anwendungsscope!
|
1711
1843
|
set :foo, 42
|
1712
1844
|
foo # => 42
|
1713
|
-
|
1845
|
+
|
1714
1846
|
get '/foo' do
|
1715
1847
|
# Hey, ich bin nicht mehr im Anwendungs-Scope!
|
1716
1848
|
end
|
@@ -1743,12 +1875,12 @@ Anwendungs-Scope zugegriffen werden:
|
|
1743
1875
|
get '/neue_route/:name' do
|
1744
1876
|
# Anfrage-Scope für '/neue_route/:name'
|
1745
1877
|
@value = 42
|
1746
|
-
|
1878
|
+
|
1747
1879
|
settings.get "/#{params[:name]}" do
|
1748
1880
|
# Anfrage-Scope für "/#{params[:name]}"
|
1749
1881
|
@value # => nil (nicht dieselbe Anfrage)
|
1750
1882
|
end
|
1751
|
-
|
1883
|
+
|
1752
1884
|
"Route definiert!"
|
1753
1885
|
end
|
1754
1886
|
end
|
@@ -1767,13 +1899,13 @@ weitergeleitet. Dieser verhält sich jedoch nicht 100%ig wie der Klassen-Scope,
|
|
1767
1899
|
da man nicht die Bindung der Klasse besitzt: Nur Methoden, die explizit als
|
1768
1900
|
delegierbar markiert wurden, stehen hier zur Verfügung und es kann nicht auf
|
1769
1901
|
die Variablen des Klassenscopes zugegriffen werden (mit anderen Worten: es gibt
|
1770
|
-
ein anderes +self+). Weitere Delegationen können mit
|
1902
|
+
ein anderes +self+). Weitere Delegationen können mit
|
1771
1903
|
<tt>Sinatra::Delegator.delegate :methoden_name</tt> hinzugefügt werden.
|
1772
1904
|
|
1773
1905
|
Im Delegation-Scop befindet man sich:
|
1774
1906
|
|
1775
1907
|
* Im Top-Level, wenn <tt>require 'sinatra'</tt> aufgerufen wurde.
|
1776
|
-
* In einem Objekt, das mit dem <tt>Sinatra::Delegator</tt>-Mixin erweitert
|
1908
|
+
* In einem Objekt, das mit dem <tt>Sinatra::Delegator</tt>-Mixin erweitert
|
1777
1909
|
wurde.
|
1778
1910
|
|
1779
1911
|
Schau am besten im Code nach: Hier ist
|
@@ -1801,13 +1933,13 @@ Die Optionen sind:
|
|
1801
1933
|
Die folgenden Versionen werden offiziell unterstützt:
|
1802
1934
|
|
1803
1935
|
[ Ruby 1.8.7 ]
|
1804
|
-
1.8.7 wird vollständig unterstützt, aber solange nichts dagegen spricht,
|
1936
|
+
1.8.7 wird vollständig unterstützt, aber solange nichts dagegen spricht,
|
1805
1937
|
wird ein Update auf 1.9.2 oder ein Umstieg auf JRuby/Rubinius empfohlen.
|
1806
1938
|
Unterstützung für 1.8.7 wird es mindestens bis Sinatra 2.0 und Ruby 2.0 geben,
|
1807
|
-
es sei denn, dass der unwahrscheinliche Fall eintritt und 1.8.8 rauskommt.
|
1808
|
-
selbst dann ist es eher wahrscheinlich, dass 1.8.7 weiterhin unterstützt
|
1809
|
-
<b>Ruby 1.8.6 wird nicht mehr unterstützt.</b> Soll Sinatra unter 1.8.6
|
1810
|
-
eingesetzt werden, muss Sinatra 1.2 verwendet werden, dass noch bis zum
|
1939
|
+
es sei denn, dass der unwahrscheinliche Fall eintritt und 1.8.8 rauskommt.
|
1940
|
+
Doch selbst dann ist es eher wahrscheinlich, dass 1.8.7 weiterhin unterstützt
|
1941
|
+
wird. <b>Ruby 1.8.6 wird nicht mehr unterstützt.</b> Soll Sinatra unter 1.8.6
|
1942
|
+
eingesetzt werden, muss Sinatra 1.2 verwendet werden, dass noch bis zum
|
1811
1943
|
Release von Sinatra 1.4.0 fortgeführt wird.
|
1812
1944
|
|
1813
1945
|
[ Ruby 1.9.2 ]
|
@@ -1815,30 +1947,34 @@ Die folgenden Versionen werden offiziell unterstützt:
|
|
1815
1947
|
momentan noch nicht kompatibel mit 1.9 sind. Version 1.9.2p0 sollte nicht
|
1816
1948
|
verwendet werden, da unter Sinatra immer wieder Segfaults auftreten.
|
1817
1949
|
Unterstützung wird es mindestens bis zum Release von Ruby 1.9.4/2.0 geben und
|
1818
|
-
das letzte Sinatra Release für 1.9 wird so lange unterstützt, wie das Ruby
|
1950
|
+
das letzte Sinatra Release für 1.9 wird so lange unterstützt, wie das Ruby
|
1819
1951
|
Core-Team 1.9 pflegt.
|
1820
1952
|
|
1821
1953
|
[ Ruby 1.9.3 ]
|
1822
|
-
|
1954
|
+
1.9.3 wird vollständig unterstützt. Momentan wird empfohlen auf einen
|
1955
|
+
höheren Pachtlevel zu warten, bevor Sinatra in der Produktion
|
1956
|
+
eingesetzt wird (aktueller Patchlevel ist p0). Bei einem Wechsel zu
|
1957
|
+
1.9.3 werden alle Sessions ungültig.
|
1958
|
+
Obwohl Tests bereits auf 1.9.3 laufen, sind bisher keine Applikationen auf
|
1823
1959
|
1.9.3 in Produktion bekannt. Ebenso wie bei 1.9.2 besteht die gleiche Warnung
|
1824
1960
|
zum Patchlevel 0.
|
1825
|
-
|
1961
|
+
|
1826
1962
|
[ Rubinius ]
|
1827
|
-
Rubinius (rbx >= 1.2.4) wird offiziell unter Einbezug aller Templates
|
1828
|
-
unterstützt.
|
1963
|
+
Rubinius (rbx >= 1.2.4) wird offiziell unter Einbezug aller Templates
|
1964
|
+
unterstützt. Die kommende 2.0 Version wird ebenfalls unterstützt.
|
1829
1965
|
|
1830
1966
|
[ JRuby ]
|
1831
|
-
JRuby wird offiziell unterstützt (JRuby >= 1.6.
|
1832
|
-
Bibliotheken Dritter sind nicht bekannt. Falls JRuby zum Einsatz kommt,
|
1833
|
-
sollte aber darauf geachtet werden, dass ein JRuby-Rack-Handler zum Einsatz
|
1834
|
-
kommt – der Thin-Web-Server wird bisher nicht unterstütz. JRubys
|
1967
|
+
JRuby wird offiziell unterstützt (JRuby >= 1.6.5). Probleme mit Template-
|
1968
|
+
Bibliotheken Dritter sind nicht bekannt. Falls JRuby zum Einsatz kommt,
|
1969
|
+
sollte aber darauf geachtet werden, dass ein JRuby-Rack-Handler zum Einsatz
|
1970
|
+
kommt – der Thin-Web-Server wird bisher nicht unterstütz. JRubys
|
1835
1971
|
Unterstützung für C-Erweiterungen sind zur Zeit noch experimenteller Natur,
|
1836
|
-
betrifft im Moment aber nur RDiscount und
|
1972
|
+
betrifft im Moment aber nur RDiscount, Redcarpet und RedCloth.
|
1837
1973
|
|
1838
1974
|
|
1839
1975
|
Weiterhin werden wir auf kommende Ruby-Versionen ein Auge haben.
|
1840
1976
|
|
1841
|
-
Die nachfolgend aufgeführten Ruby-Implementierungen werden offiziell nicht von
|
1977
|
+
Die nachfolgend aufgeführten Ruby-Implementierungen werden offiziell nicht von
|
1842
1978
|
Sinatra unterstützt, funktionieren aber normalerweise:
|
1843
1979
|
|
1844
1980
|
* Ruby Enterprise Edition
|
@@ -1846,14 +1982,14 @@ Sinatra unterstützt, funktionieren aber normalerweise:
|
|
1846
1982
|
* MacRuby, Maglev, IronRuby
|
1847
1983
|
* Ruby 1.9.0 und 1.9.1 (wird jedoch nicht empfohlen, s.o.)
|
1848
1984
|
|
1849
|
-
Nicht offiziell unterstützt bedeutet, dass wenn Sachen nicht funktionieren,
|
1850
|
-
wir davon ausgehen, dass es nicht an Sinatra sondern an der jeweiligen
|
1985
|
+
Nicht offiziell unterstützt bedeutet, dass wenn Sachen nicht funktionieren,
|
1986
|
+
wir davon ausgehen, dass es nicht an Sinatra sondern an der jeweiligen
|
1851
1987
|
Implentierung liegt.
|
1852
1988
|
|
1853
1989
|
Im Rahmen unserer CI (Kontinuierlichen Integration) wird bereits ruby-head
|
1854
|
-
(das kommende Ruby 1.9.4
|
1855
|
-
Zeit für nichts garantiert werden. Es kann aber erwartet werden, dass
|
1856
|
-
1.9.4p0 von Sinatra unterstützt werden wird.
|
1990
|
+
(das kommende Ruby 2.0.0) und 1.9.4 mit eingebunden. Da noch alles im Fluss ist,
|
1991
|
+
kann zur Zeit für nichts garantiert werden. Es kann aber erwartet werden, dass
|
1992
|
+
Ruby 2.0.0p0 und 1.9.4p0 von Sinatra unterstützt werden wird.
|
1857
1993
|
|
1858
1994
|
Sinatra sollte auf jedem Betriebssystem laufen, dass den gewählten Ruby-
|
1859
1995
|
Interpreter unterstützt.
|
@@ -1864,9 +2000,9 @@ Version von Ruby vor 1.8.7 laufen.
|
|
1864
2000
|
== Der neuste Stand (The Bleeding Edge)
|
1865
2001
|
|
1866
2002
|
Um auf dem neusten Stand zu bleiben, kann der Master-Branch verwendet werden.
|
1867
|
-
Er sollte recht stabil sein. Ebenso gibt es von Zeit zu Zeit prerelease Gems,
|
2003
|
+
Er sollte recht stabil sein. Ebenso gibt es von Zeit zu Zeit prerelease Gems,
|
1868
2004
|
die so installiert werden:
|
1869
|
-
|
2005
|
+
|
1870
2006
|
gem install sinatra --pre
|
1871
2007
|
|
1872
2008
|
=== Mit Bundler
|
@@ -1884,7 +2020,7 @@ Inhalt erstellt:
|
|
1884
2020
|
|
1885
2021
|
source :rubygems
|
1886
2022
|
gem 'sinatra', :git => "git://github.com/sinatra/sinatra.git"
|
1887
|
-
|
2023
|
+
|
1888
2024
|
# evtl. andere Abhängigkeiten
|
1889
2025
|
gem 'haml' # z.B. wenn du Haml verwendest...
|
1890
2026
|
gem 'activerecord', '~> 3.0' # ...oder ActiveRecord 3.x
|
@@ -1897,7 +2033,6 @@ Jetzt kannst du deine Applikation starten:
|
|
1897
2033
|
|
1898
2034
|
bundle exec ruby myapp.rb
|
1899
2035
|
|
1900
|
-
|
1901
2036
|
=== Eigenes Repository
|
1902
2037
|
Um auf dem neuesten Stand von Sinatras Code zu sein, kann eine lokale Kopie
|
1903
2038
|
angelegt werden. Gestartet wird in der Anwendung mit dem <tt>sinatra/lib</tt>-
|
@@ -1932,14 +2067,14 @@ Aus der eigenen lokalen Kopie kann nun auch ein globales Gem gebaut werden:
|
|
1932
2067
|
rake sinatra.gemspec
|
1933
2068
|
rake install
|
1934
2069
|
|
1935
|
-
Falls Gems als Root installiert werden sollen, sollte die letzte Zeile
|
2070
|
+
Falls Gems als Root installiert werden sollen, sollte die letzte Zeile
|
1936
2071
|
folgendermaßen lauten:
|
1937
2072
|
|
1938
2073
|
sudo rake install
|
1939
2074
|
|
1940
2075
|
== Versions-Verfahren
|
1941
2076
|
|
1942
|
-
Sinatra folgt dem sogenannten {Semantic Versioning}[http://semver.org/], d.h.
|
2077
|
+
Sinatra folgt dem sogenannten {Semantic Versioning}[http://semver.org/], d.h.
|
1943
2078
|
SemVer und SemVerTag.
|
1944
2079
|
|
1945
2080
|
== Mehr
|
@@ -1959,3 +2094,4 @@ SemVer und SemVerTag.
|
|
1959
2094
|
oder für {HEAD}[http://rubydoc.info/github/sinatra/sinatra] auf
|
1960
2095
|
http://rubydoc.info
|
1961
2096
|
* {CI Server}[http://ci.rkh.im/view/Sinatra/]
|
2097
|
+
|