mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
German readme update and fixes
solved the sass, scss and haml Optionen genitive issue by making it a compound noun. Apostrophies just look bad. I also added before each section a double newline and a single newline after each section. I find it easier to read now. Signed-off-by: Konstantin Haase <konstantin.mailinglists@googlemail.com>
This commit is contained in:
parent
0fbb0c75ca
commit
7949da7404
1 changed files with 204 additions and 133 deletions
331
README.de.rdoc
331
README.de.rdoc
|
@ -1,4 +1,5 @@
|
||||||
= Sinatra
|
= Sinatra
|
||||||
|
|
||||||
<i>Wichtig: Dieses Dokument ist eine Übersetzung aus dem Englischen und unter
|
<i>Wichtig: Dieses Dokument ist eine Übersetzung aus dem Englischen und unter
|
||||||
Umständen nicht auf dem aktuellen Stand.</i>
|
Umständen nicht auf dem aktuellen Stand.</i>
|
||||||
|
|
||||||
|
@ -18,8 +19,9 @@ Einfach via +rubygems+ installieren und starten:
|
||||||
|
|
||||||
Die Seite kann nun unter http://localhost:4567 betrachtet werden.
|
Die Seite kann nun unter http://localhost:4567 betrachtet werden.
|
||||||
|
|
||||||
Es wird empfohlen, den Thin-Server via <tt>gem install thin</tt> zu installieren,
|
Es wird empfohlen, den Thin-Server via <tt>gem install thin</tt> zu
|
||||||
den Sinatra dann, soweit vorhanden, automatisch verwendet.
|
installieren, den Sinatra dann, soweit vorhanden, automatisch verwendet.
|
||||||
|
|
||||||
|
|
||||||
== Routen
|
== Routen
|
||||||
|
|
||||||
|
@ -89,6 +91,7 @@ Und auch hier können Block-Parameter genutzt werden:
|
||||||
"Hallo, #{c}!"
|
"Hallo, #{c}!"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== Bedingungen
|
=== Bedingungen
|
||||||
|
|
||||||
An Routen können eine Vielzahl von Bedingungen angehängt werden, die erfüllt
|
An Routen können eine Vielzahl von Bedingungen angehängt werden, die erfüllt
|
||||||
|
@ -129,24 +132,24 @@ Es können auch andere Bedingungen relativ einfach hinzugefügt werden:
|
||||||
"Tut mir leid, verloren."
|
"Tut mir leid, verloren."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== Rückgabewerte
|
=== Rückgabewerte
|
||||||
|
|
||||||
Durch den Rückgabewert eines Routen-Blocks wird mindestens der Response-Body
|
Durch den Rückgabewert eines Routen-Blocks wird mindestens der Response-Body
|
||||||
festgelegt, der an den HTTP-Client, bzw die nächste Rack-Middleware,
|
festgelegt, der an den HTTP-Client, bzw. die nächste Rack-Middleware,
|
||||||
weitergegeben wird. Im Normalfall handelt es sich hierbei, wie
|
weitergegeben wird. Im Normalfall handelt es sich hierbei, wie in den
|
||||||
in den vorangehenden Beispielen zu sehen war, um einen String. Es werden
|
vorangehenden Beispielen zu sehen war, um einen String. Es werden allerdings
|
||||||
allerdings auch andere Werte akzeptiert.
|
auch andere Werte akzeptiert.
|
||||||
|
|
||||||
Es kann jedes Objekt zurückgegeben werden, bei dem es sich entweder um einen validen
|
Es kann jedes gültige Objekt zurückgegeben werden, bei dem es sich entweder um
|
||||||
Rack-Rückgabewert, einen validen Rack-Body oder einen HTTP-Status-Code
|
einen Rack-Rückgabewert, einen Rack-Body oder einen HTTP-Status-Code handelt:
|
||||||
handelt:
|
|
||||||
|
|
||||||
* Ein Array mit drei Elementen: <tt>[Status (Fixnum), Headers (Hash), Response
|
* Ein Array mit drei Elementen: <tt>[Status (Fixnum), Headers (Hash),
|
||||||
Body (antwortet auf #each)]</tt>.
|
Response-Body (antwortet auf #each)]</tt>.
|
||||||
* Ein Array mit zwei Elementen: <tt>[Status (Fixnum), Response Body (antwortet auf
|
* Ein Array mit zwei Elementen: <tt>[Status (Fixnum), Response-Body (antwortet
|
||||||
#each)]</tt>.
|
auf #each)]</tt>.
|
||||||
* Ein Objekt, das auf <tt>#each</tt> antwortet und den an diese Methode übergebenen
|
* Ein Objekt, das auf <tt>#each</tt> antwortet und den an diese Methode
|
||||||
Block nur mit Strings als Übergabewerte aufruft.
|
übergebenen Block nur mit Strings als Übergabewerte aufruft.
|
||||||
* Ein Fixnum, das den Status-Code festlegt.
|
* Ein Fixnum, das den Status-Code festlegt.
|
||||||
|
|
||||||
Damit lässt sich relativ einfach Streaming implementieren:
|
Damit lässt sich relativ einfach Streaming implementieren:
|
||||||
|
@ -159,7 +162,9 @@ Damit lässt sich relativ einfach Streaming implementieren:
|
||||||
|
|
||||||
get('/') { Stream.new }
|
get('/') { Stream.new }
|
||||||
|
|
||||||
|
|
||||||
=== Eigene Routen-Muster
|
=== Eigene Routen-Muster
|
||||||
|
|
||||||
Wie oben schon beschrieben, ist Sinatra von Haus aus mit Unterstützung für
|
Wie oben schon beschrieben, ist Sinatra von Haus aus mit Unterstützung für
|
||||||
String-Muster und Reguläre Ausdrücke zum Abgleichen von Routen ausgestattet.
|
String-Muster und Reguläre Ausdrücke zum Abgleichen von Routen ausgestattet.
|
||||||
Das muss aber noch nicht alles sein, es können ohne großen Aufwand eigene
|
Das muss aber noch nicht alles sein, es können ohne großen Aufwand eigene
|
||||||
|
@ -186,7 +191,8 @@ Routen-Muster erstellt werden:
|
||||||
# ...
|
# ...
|
||||||
end
|
end
|
||||||
|
|
||||||
Beachte, dass das obige Beispiel etwas übertrieben wirkt. Es geht auch einfacher:
|
Beachte, dass das obige Beispiel etwas übertrieben wirkt. Es geht auch
|
||||||
|
einfacher:
|
||||||
|
|
||||||
get // do
|
get // do
|
||||||
pass if request.path_info == "/index"
|
pass if request.path_info == "/index"
|
||||||
|
@ -199,6 +205,7 @@ Oder unter Verwendung eines negativen look ahead:
|
||||||
# ...
|
# ...
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
== Statische Dateien
|
== Statische Dateien
|
||||||
|
|
||||||
Statische Dateien werden aus dem <tt>./public</tt>-Ordner ausgeliefert. Es ist
|
Statische Dateien werden aus dem <tt>./public</tt>-Ordner ausgeliefert. Es ist
|
||||||
|
@ -211,6 +218,7 @@ Zu beachten ist, dass der Ordnername public nicht Teil der URL ist. Die Datei
|
||||||
<tt>./public/css/style.css</tt> ist unter
|
<tt>./public/css/style.css</tt> ist unter
|
||||||
<tt>http://example.com/css/style.css</tt> zu finden.
|
<tt>http://example.com/css/style.css</tt> zu finden.
|
||||||
|
|
||||||
|
|
||||||
== Views/Templates
|
== Views/Templates
|
||||||
|
|
||||||
Standardmäßig wird davon ausgegangen, dass sich Templates im
|
Standardmäßig wird davon ausgegangen, dass sich Templates im
|
||||||
|
@ -219,11 +227,12 @@ werden:
|
||||||
|
|
||||||
set :views, File.dirname(__FILE__) + '/templates'
|
set :views, File.dirname(__FILE__) + '/templates'
|
||||||
|
|
||||||
Eine wichtige Sache, die man sich hierbei merken sollte, ist, dass man immer mit
|
Eine wichtige Sache, die man sich hierbei merken sollte, ist, dass man immer
|
||||||
Symbols auf Templates verweisen sollte, auch wenn sich ein Template in einem
|
mit Symbols auf Templates verweisen sollte, auch wenn sich ein Template in
|
||||||
Unterordner befindet (in diesen Fall <tt>:'subdir/template'</tt>).
|
einem Unterordner befindet (in diesen Fall <tt>:'subdir/template'</tt>).
|
||||||
Rendering-Methoden rendern jeden String direkt.
|
Rendering-Methoden rendern jeden String direkt.
|
||||||
|
|
||||||
|
|
||||||
=== Haml-Templates
|
=== Haml-Templates
|
||||||
|
|
||||||
Das +haml+-Gem wird benötigt, um Haml-Templates rendern zu können:
|
Das +haml+-Gem wird benötigt, um Haml-Templates rendern zu können:
|
||||||
|
@ -237,7 +246,7 @@ Das +haml+-Gem wird benötigt, um Haml-Templates rendern zu können:
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/index.haml</tt>.
|
Dieser Code rendert <tt>./views/index.haml</tt>.
|
||||||
|
|
||||||
{Hamls Optionen}[http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#options]
|
{Haml-Optionen}[http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#options]
|
||||||
können global durch die Sinatra-Konfiguration gesetzt werden,
|
können global durch die Sinatra-Konfiguration gesetzt werden,
|
||||||
siehe {Optionen und Konfiguration}[http://www.sinatrarb.com/configuration.html],
|
siehe {Optionen und Konfiguration}[http://www.sinatrarb.com/configuration.html],
|
||||||
und individuell überschrieben werden.
|
und individuell überschrieben werden.
|
||||||
|
@ -248,6 +257,7 @@ und individuell überschrieben werden.
|
||||||
haml :index, :format => :html4 # überschrieben
|
haml :index, :format => :html4 # überschrieben
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== Erb-Templates
|
=== Erb-Templates
|
||||||
|
|
||||||
# erb muss eingebunden werden
|
# erb muss eingebunden werden
|
||||||
|
@ -259,6 +269,7 @@ und individuell überschrieben werden.
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/index.erb</tt>.
|
Dieser Code rendert <tt>./views/index.erb</tt>.
|
||||||
|
|
||||||
|
|
||||||
=== Erubis
|
=== Erubis
|
||||||
|
|
||||||
Das +erubis+-Gem wird benötigt, um Erubis-Templates rendern zu können:
|
Das +erubis+-Gem wird benötigt, um Erubis-Templates rendern zu können:
|
||||||
|
@ -283,6 +294,7 @@ Es ist auch möglich, Erb durch Erubis zu ersetzen:
|
||||||
|
|
||||||
Dieser Code rendert ebenfalls <tt>./views/index.erb</tt>.
|
Dieser Code rendert ebenfalls <tt>./views/index.erb</tt>.
|
||||||
|
|
||||||
|
|
||||||
=== Builder-Templates
|
=== Builder-Templates
|
||||||
|
|
||||||
Das +builder+-Gem wird benötigt, um Builder-Templates rendern zu können:
|
Das +builder+-Gem wird benötigt, um Builder-Templates rendern zu können:
|
||||||
|
@ -296,6 +308,7 @@ Das +builder+-Gem wird benötigt, um Builder-Templates rendern zu können:
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/index.builder</tt>.
|
Dieser Code rendert <tt>./views/index.builder</tt>.
|
||||||
|
|
||||||
|
|
||||||
=== Nokogiri-Templates
|
=== Nokogiri-Templates
|
||||||
|
|
||||||
Das +nokogiri+-Gem wird benötigt, um Nokogiri-Templates rendern zu können:
|
Das +nokogiri+-Gem wird benötigt, um Nokogiri-Templates rendern zu können:
|
||||||
|
@ -309,6 +322,7 @@ Das +nokogiri+-Gem wird benötigt, um Nokogiri-Templates rendern zu können:
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/index.nokogiri</tt>.
|
Dieser Code rendert <tt>./views/index.nokogiri</tt>.
|
||||||
|
|
||||||
|
|
||||||
=== Sass-Templates
|
=== Sass-Templates
|
||||||
|
|
||||||
Das +haml+- oder +sass+-Gem wird benötigt, um Sass-Templates rendern zu können:
|
Das +haml+- oder +sass+-Gem wird benötigt, um Sass-Templates rendern zu können:
|
||||||
|
@ -322,9 +336,9 @@ Das +haml+- oder +sass+-Gem wird benötigt, um Sass-Templates rendern zu können
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/stylesheet.sass</tt>.
|
Dieser Code rendert <tt>./views/stylesheet.sass</tt>.
|
||||||
|
|
||||||
{Sass' Optionen}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
|
{Sass-Optionen}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
|
||||||
können global durch die Sinatra-Konfiguration gesetzt werden,
|
können global durch die Sinatra-Konfiguration gesetzt werden, siehe
|
||||||
siehe {Optionen und Konfiguration}[http://www.sinatrarb.com/configuration.html],
|
{Optionen und Konfiguration}[http://www.sinatrarb.com/configuration.html],
|
||||||
und individuell überschrieben werden.
|
und individuell überschrieben werden.
|
||||||
|
|
||||||
set :sass, :style => :compact # Standard Sass-Style ist :nested
|
set :sass, :style => :compact # Standard Sass-Style ist :nested
|
||||||
|
@ -333,6 +347,7 @@ und individuell überschrieben werden.
|
||||||
sass :stylesheet, :style => :expanded # überschrieben
|
sass :stylesheet, :style => :expanded # überschrieben
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== SCSS-Templates
|
=== SCSS-Templates
|
||||||
|
|
||||||
Das +haml+- oder +sass+-Gem wird benötigt, um SCSS-Templates rendern zu können:
|
Das +haml+- oder +sass+-Gem wird benötigt, um SCSS-Templates rendern zu können:
|
||||||
|
@ -346,10 +361,10 @@ Das +haml+- oder +sass+-Gem wird benötigt, um SCSS-Templates rendern zu können
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/stylesheet.scss</tt>.
|
Dieser Code rendert <tt>./views/stylesheet.scss</tt>.
|
||||||
|
|
||||||
{SCSS' Optionen}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
|
{SCSS-Optionen}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options]
|
||||||
können global durch die Sinatra-Konfiguration gesetzt werden,
|
können global durch die Sinatra-Konfiguration gesetzt werden, siehe
|
||||||
siehe {Optionen und Konfiguration}[http://www.sinatrarb.com/configuration.html],
|
{Optionen und Konfiguration}[http://www.sinatrarb.com/configuration.html], und
|
||||||
und individuell überschrieben werden.
|
individuell überschrieben werden.
|
||||||
|
|
||||||
set :scss, :style => :compact # Standard-SCSS-Style ist :nested
|
set :scss, :style => :compact # Standard-SCSS-Style ist :nested
|
||||||
|
|
||||||
|
@ -357,6 +372,7 @@ und individuell überschrieben werden.
|
||||||
scss :stylesheet, :style => :expanded # überschrieben
|
scss :stylesheet, :style => :expanded # überschrieben
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== Less-Templates
|
=== Less-Templates
|
||||||
|
|
||||||
Das +less+-Gem wird benötigt, um Less-Templates rendern zu können:
|
Das +less+-Gem wird benötigt, um Less-Templates rendern zu können:
|
||||||
|
@ -370,6 +386,7 @@ Das +less+-Gem wird benötigt, um Less-Templates rendern zu können:
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/stylesheet.less</tt>.
|
Dieser Code rendert <tt>./views/stylesheet.less</tt>.
|
||||||
|
|
||||||
|
|
||||||
=== Liquid-Templates
|
=== Liquid-Templates
|
||||||
|
|
||||||
Das +liquid+-Gem wird benötigt, um Liquid-Templates rendern zu können:
|
Das +liquid+-Gem wird benötigt, um Liquid-Templates rendern zu können:
|
||||||
|
@ -383,11 +400,12 @@ Das +liquid+-Gem wird benötigt, um Liquid-Templates rendern zu können:
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/index.liquid</tt>.
|
Dieser Code rendert <tt>./views/index.liquid</tt>.
|
||||||
|
|
||||||
Da aus Liquid-Templates heraus keine Methoden (abgesehen von +yield+) aufgerufen
|
Da aus Liquid-Templates heraus keine Methoden (abgesehen von +yield+)
|
||||||
werden können, es es möglich, +locals+ zu übergeben:
|
aufgerufen werden können, ist es möglich, +locals+ zu übergeben:
|
||||||
|
|
||||||
liquid :index, :locals => { :key => 'value' }
|
liquid :index, :locals => { :key => 'value' }
|
||||||
|
|
||||||
|
|
||||||
=== Markdown-Templates
|
=== Markdown-Templates
|
||||||
|
|
||||||
Das +rdiscount+-Gem wird benötigt, um Markdown-Templates rendern zu können:
|
Das +rdiscount+-Gem wird benötigt, um Markdown-Templates rendern zu können:
|
||||||
|
@ -414,10 +432,10 @@ aufzurufen:
|
||||||
%h1 Hallo von Haml!
|
%h1 Hallo von Haml!
|
||||||
%p= markdown(:greetings)
|
%p= markdown(:greetings)
|
||||||
|
|
||||||
Da man Ruby aus Markdown heraus nicht aufrufen kann, ist es nicht
|
Da man Ruby aus Markdown heraus nicht aufrufen kann, ist es nicht möglich,
|
||||||
möglich, Layouts zu verwenden, die in Markdown geschrieben sind. Es ist aber
|
Layouts zu verwenden, die in Markdown geschrieben sind. Es ist aber möglich,
|
||||||
möglich, einen anderen Renderer für das Template zu verwenden als für das
|
einen anderen Renderer für das Template zu verwenden als für das Layout, indem
|
||||||
Layout, indem man die <tt>:layout_engine</tt>-Option angibt:
|
man die <tt>:layout_engine</tt>-Option angibt:
|
||||||
|
|
||||||
get '/' do
|
get '/' do
|
||||||
markdown :index, :layout_engine => :erb
|
markdown :index, :layout_engine => :erb
|
||||||
|
@ -451,6 +469,7 @@ Ebenso ist es möglich, Markdown mit BlueCloth anstelle von RDiscount zu parsen:
|
||||||
|
|
||||||
Das sollte <tt>./views/index.md</tt> mit BlueCloth rendern.
|
Das sollte <tt>./views/index.md</tt> mit BlueCloth rendern.
|
||||||
|
|
||||||
|
|
||||||
=== Textile-Templates
|
=== Textile-Templates
|
||||||
|
|
||||||
Das +redcloth+-Gem wird benötigt, um Textile-Templates rendern zu können:
|
Das +redcloth+-Gem wird benötigt, um Textile-Templates rendern zu können:
|
||||||
|
@ -465,8 +484,8 @@ Das +redcloth+-Gem wird benötigt, um Textile-Templates rendern zu können:
|
||||||
Dieser Code rendert <tt>./views/index.textile</tt>.
|
Dieser Code rendert <tt>./views/index.textile</tt>.
|
||||||
|
|
||||||
Da es weder möglich ist, Methoden aufzurufen, noch +locals+ zu übergeben, ist
|
Da es weder möglich ist, Methoden aufzurufen, noch +locals+ zu übergeben, ist
|
||||||
es sinnvoll, Textile in Kombination mit einer anderen Template-Engine
|
es sinnvoll, Textile in Kombination mit einer anderen Template-Engine zu
|
||||||
zu nutzen:
|
nutzen:
|
||||||
|
|
||||||
erb :overview, :locals => { :text => textile(:introduction) }
|
erb :overview, :locals => { :text => textile(:introduction) }
|
||||||
|
|
||||||
|
@ -476,18 +495,17 @@ aufzurufen:
|
||||||
%h1 Hallo von Haml!
|
%h1 Hallo von Haml!
|
||||||
%p= textile(:greetings)
|
%p= textile(:greetings)
|
||||||
|
|
||||||
Da man Ruby aus Textile heraus nicht aufrufen kann, ist es nicht
|
Da man Ruby aus Textile heraus nicht aufrufen kann, ist es nicht möglich,
|
||||||
möglich, Layouts zu verwenden, die in Textile geschrieben sind. Es ist aber
|
Layouts zu verwenden, die in Textile geschrieben sind. Es ist aber möglich,
|
||||||
möglich, einen anderen Renderer für das Template zu verwenden als für das
|
einen anderen Renderer für das Template zu verwenden als für das Layout, indem
|
||||||
Layout, indem man die <tt>:layout_engine</tt>-Option angibt:
|
man die <tt>:layout_engine</tt>-Option angibt:
|
||||||
|
|
||||||
get '/' do
|
get '/' do
|
||||||
textile :index, :layout_engine => :erb
|
textile :index, :layout_engine => :erb
|
||||||
end
|
end
|
||||||
|
|
||||||
Das wird <tt>./views/index.textile</tt> mit
|
Das wird <tt>./views/index.textile</tt> mit <tt>./views/layout.erb</tt> als
|
||||||
<tt>./views/layout.erb</tt> als Layout
|
Layout rendern.
|
||||||
rendern.
|
|
||||||
|
|
||||||
Denk daran, dass solche Einstellungen auch global gesetzt werden können:
|
Denk daran, dass solche Einstellungen auch global gesetzt werden können:
|
||||||
|
|
||||||
|
@ -500,6 +518,7 @@ Denk daran, dass solche Einstellungen auch global gesetzt werden können:
|
||||||
Das wird <tt>./views/index.textile</tt> (und jedes andere Markdown-Template)
|
Das wird <tt>./views/index.textile</tt> (und jedes andere Markdown-Template)
|
||||||
mit <tt>./views/post.haml</tt> als Layout rendern.
|
mit <tt>./views/post.haml</tt> als Layout rendern.
|
||||||
|
|
||||||
|
|
||||||
=== RDoc-Templates
|
=== RDoc-Templates
|
||||||
|
|
||||||
Das +rdoc+-Gem wird benötigt, um RDoc-Templates rendern zu können:
|
Das +rdoc+-Gem wird benötigt, um RDoc-Templates rendern zu können:
|
||||||
|
@ -514,8 +533,7 @@ Das +rdoc+-Gem wird benötigt, um RDoc-Templates rendern zu können:
|
||||||
Dieser Code rendert <tt>./views/index.rdoc</tt>.
|
Dieser Code rendert <tt>./views/index.rdoc</tt>.
|
||||||
|
|
||||||
Da es weder möglich ist, Methoden aufzurufen, noch +locals+ zu übergeben, ist
|
Da es weder möglich ist, Methoden aufzurufen, noch +locals+ zu übergeben, ist
|
||||||
es sinnvoll, RDoc in Kombination mit einer anderen Template-Engine
|
es sinnvoll, RDoc in Kombination mit einer anderen Template-Engine zu nutzen:
|
||||||
zu nutzen:
|
|
||||||
|
|
||||||
erb :overview, :locals => { :text => rdoc(:introduction) }
|
erb :overview, :locals => { :text => rdoc(:introduction) }
|
||||||
|
|
||||||
|
@ -525,17 +543,16 @@ aufzurufen:
|
||||||
%h1 Hallo von Haml!
|
%h1 Hallo von Haml!
|
||||||
%p= rdoc(:greetings)
|
%p= rdoc(:greetings)
|
||||||
|
|
||||||
Da man Ruby aus RDoc heraus nicht aufrufen kann, ist es nicht
|
Da man Ruby aus RDoc heraus nicht aufrufen kann, ist es nicht möglich, Layouts
|
||||||
möglich, Layouts zu verwenden, die in RDoc geschrieben sind. Es ist aber
|
zu verwenden, die in RDoc geschrieben sind. Es ist aber möglich, einen anderen
|
||||||
möglich, einen anderen Renderer für das Template zu verwenden als für das
|
Renderer für das Template zu verwenden als für das Layout, indem man die
|
||||||
Layout, indem man die <tt>:layout_engine</tt> option angibt:
|
<tt>:layout_engine</tt> option angibt:
|
||||||
|
|
||||||
get '/' do
|
get '/' do
|
||||||
rdoc :index, :layout_engine => :erb
|
rdoc :index, :layout_engine => :erb
|
||||||
end
|
end
|
||||||
|
|
||||||
Das wird <tt>./views/index.rdoc</tt> mit
|
Das wird <tt>./views/index.rdoc</tt> mit <tt>./views/layout.erb</tt> als Layout
|
||||||
<tt>./views/layout.erb</tt> als Layout
|
|
||||||
rendern.
|
rendern.
|
||||||
|
|
||||||
Denk daran, dass solche Einstellungen auch global gesetzt werden können:
|
Denk daran, dass solche Einstellungen auch global gesetzt werden können:
|
||||||
|
@ -563,11 +580,12 @@ Das +radius+-Gem wird benötigt, um Radius-Templates rendern zu können:
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/index.radius</tt>.
|
Dieser Code rendert <tt>./views/index.radius</tt>.
|
||||||
|
|
||||||
Da aus Radius-Templates heraus keine Methoden (abgesehen von +yield+) aufgerufen
|
Da aus Radius-Templates heraus keine Methoden (abgesehen von +yield+)
|
||||||
werden können, es es möglich, +locals+ zu übergeben:
|
aufgerufen werden können, es es möglich, +locals+ zu übergeben:
|
||||||
|
|
||||||
radius :index, :locals => { :key => 'value' }
|
radius :index, :locals => { :key => 'value' }
|
||||||
|
|
||||||
|
|
||||||
=== Markaby-Templates
|
=== Markaby-Templates
|
||||||
|
|
||||||
Das +markaby+-Gem wird benötigt, um Markaby-Templates rendern zu können:
|
Das +markaby+-Gem wird benötigt, um Markaby-Templates rendern zu können:
|
||||||
|
@ -581,6 +599,7 @@ Das +markaby+-Gem wird benötigt, um Markaby-Templates rendern zu können:
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/index.mab</tt>.
|
Dieser Code rendert <tt>./views/index.mab</tt>.
|
||||||
|
|
||||||
|
|
||||||
=== Slim-Templates
|
=== Slim-Templates
|
||||||
|
|
||||||
Das +slim+-Gem wird benötigt, um Slim-Templates rendern zu können:
|
Das +slim+-Gem wird benötigt, um Slim-Templates rendern zu können:
|
||||||
|
@ -594,10 +613,11 @@ Das +slim+-Gem wird benötigt, um Slim-Templates rendern zu können:
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/index.slim</tt>.
|
Dieser Code rendert <tt>./views/index.slim</tt>.
|
||||||
|
|
||||||
|
|
||||||
=== CoffeeScript-Templates
|
=== CoffeeScript-Templates
|
||||||
|
|
||||||
Das +coffee-script+-Gem und mindestens eine der folgenden Optionen werden
|
Das <tt>coffee-script</tt>-Gem und mindestens eine der folgenden Optionen
|
||||||
benötigt, um JavaScript auf dem Server ausführen zu können:
|
werden benötigt, um JavaScript auf dem Server ausführen zu können:
|
||||||
|
|
||||||
* +node+ (von Node.js) befindet sich im Pfad
|
* +node+ (von Node.js) befindet sich im Pfad
|
||||||
* du bist unter OS X
|
* du bist unter OS X
|
||||||
|
@ -617,6 +637,7 @@ Nun können CoffeeScript-Templates in der Applikation gerendert werden:
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/application.coffee</tt>.
|
Dieser Code rendert <tt>./views/application.coffee</tt>.
|
||||||
|
|
||||||
|
|
||||||
=== Inline-Templates
|
=== Inline-Templates
|
||||||
|
|
||||||
get '/' do
|
get '/' do
|
||||||
|
@ -625,10 +646,11 @@ Dieser Code rendert <tt>./views/application.coffee</tt>.
|
||||||
|
|
||||||
Rendert den Inline-Template-String.
|
Rendert den Inline-Template-String.
|
||||||
|
|
||||||
|
|
||||||
=== Auf Variablen in Templates zugreifen
|
=== Auf Variablen in Templates zugreifen
|
||||||
|
|
||||||
Templates werden in demselben Kontext ausgeführt wie Routen. Instanzvariablen in
|
Templates werden in demselben Kontext ausgeführt wie Routen. Instanzvariablen
|
||||||
Routen sind auch direkt im Template verfügbar:
|
in Routen sind auch direkt im Template verfügbar:
|
||||||
|
|
||||||
get '/:id' do
|
get '/:id' do
|
||||||
@foo = Foo.find(params[:id])
|
@foo = Foo.find(params[:id])
|
||||||
|
@ -645,6 +667,7 @@ Oder durch einen expliziten Hash von lokalen Variablen:
|
||||||
Dies wird typischerweise bei Verwendung von Subtemplates (partials) in anderen
|
Dies wird typischerweise bei Verwendung von Subtemplates (partials) in anderen
|
||||||
Templates eingesetzt.
|
Templates eingesetzt.
|
||||||
|
|
||||||
|
|
||||||
=== Inline-Templates
|
=== Inline-Templates
|
||||||
|
|
||||||
Templates können auch am Ende der Datei definiert werden:
|
Templates können auch am Ende der Datei definiert werden:
|
||||||
|
@ -669,6 +692,7 @@ Anmerkung: Inline-Templates, die in der Datei definiert sind, die <tt>require
|
||||||
in anderen Dateien aufzurufen, muss explizit <tt>enable :inline_templates</tt>
|
in anderen Dateien aufzurufen, muss explizit <tt>enable :inline_templates</tt>
|
||||||
verwendet werden.
|
verwendet werden.
|
||||||
|
|
||||||
|
|
||||||
=== Benannte Templates
|
=== Benannte Templates
|
||||||
|
|
||||||
Templates können auch mit der Top-Level <tt>template</tt>-Methode definiert
|
Templates können auch mit der Top-Level <tt>template</tt>-Methode definiert
|
||||||
|
@ -687,20 +711,24 @@ werden:
|
||||||
end
|
end
|
||||||
|
|
||||||
Wenn ein Template mit dem Namen "layout" existiert, wird es bei jedem Aufruf
|
Wenn ein Template mit dem Namen "layout" existiert, wird es bei jedem Aufruf
|
||||||
verwendet. Durch <tt>:layout => false</tt> kann das Ausführen verhindert werden:
|
verwendet. Durch <tt>:layout => false</tt> kann das Ausführen verhindert
|
||||||
|
werden:
|
||||||
|
|
||||||
get '/' do
|
get '/' do
|
||||||
haml :index, :layout => !request.xhr?
|
haml :index, :layout => !request.xhr?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== Dateiendungen zuordnen
|
=== Dateiendungen zuordnen
|
||||||
|
|
||||||
Um eine Dateiendung einer Template-Engine zuzuordnen, kann <tt>Tilt.register</tt>
|
Um eine Dateiendung einer Template-Engine zuzuordnen, kann
|
||||||
genutzt werden. Wenn etwa die Dateiendung +tt+ für Textile-Templates
|
<tt>Tilt.register</tt> genutzt werden. Wenn etwa die Dateiendung +tt+ für
|
||||||
genutzt werden soll, lässt sich dies wie folgt bewerkstelligen:
|
Textile-Templates genutzt werden soll, lässt sich dies wie folgt
|
||||||
|
bewerkstelligen:
|
||||||
|
|
||||||
Tilt.register :tt, Tilt[:textile]
|
Tilt.register :tt, Tilt[:textile]
|
||||||
|
|
||||||
|
|
||||||
=== Eine eigene Template-Engine hinzufügen
|
=== Eine eigene Template-Engine hinzufügen
|
||||||
|
|
||||||
Zu allererst muss die Engine bei Tilt registriert und danach eine
|
Zu allererst muss die Engine bei Tilt registriert und danach eine
|
||||||
|
@ -717,13 +745,14 @@ Rendering-Methode erstellt werden:
|
||||||
end
|
end
|
||||||
|
|
||||||
Dieser Code rendert <tt>./views/application.mtt</tt>. Siehe
|
Dieser Code rendert <tt>./views/application.mtt</tt>. Siehe
|
||||||
github.com/rtomayko/tilt[https://github.com/rtomayko/tilt],
|
github.com/rtomayko/tilt[https://github.com/rtomayko/tilt], um mehr über Tilt
|
||||||
um mehr über Tilt zu lernen.
|
zu lernen.
|
||||||
|
|
||||||
|
|
||||||
== Filter
|
== Filter
|
||||||
|
|
||||||
Before-Filter werden vor jedem Request in demselben Kontext, wie danach
|
Before-Filter werden vor jedem Request in demselben Kontext, wie danach die
|
||||||
die Routen, ausgeführt. So können etwa Request und Antwort geändert werden.
|
Routen, ausgeführt. So können etwa Request und Antwort geändert werden.
|
||||||
Gesetzte Instanzvariablen in Filtern können in Routen und Templates verwendet
|
Gesetzte Instanzvariablen in Filtern können in Routen und Templates verwendet
|
||||||
werden:
|
werden:
|
||||||
|
|
||||||
|
@ -767,6 +796,7 @@ werden:
|
||||||
# ...
|
# ...
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
== Helfer
|
== Helfer
|
||||||
|
|
||||||
Durch die Top-Level <tt>helpers</tt>-Methode werden sogenannte Helfer-Methoden
|
Durch die Top-Level <tt>helpers</tt>-Methode werden sogenannte Helfer-Methoden
|
||||||
|
@ -782,6 +812,7 @@ definiert, die in Routen und Templates verwendet werden können:
|
||||||
bar(params[:name])
|
bar(params[:name])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== Sessions verwenden
|
=== Sessions verwenden
|
||||||
Sessions werden verwendet, um Zustände zwischen den Requests zu speichern.
|
Sessions werden verwendet, um Zustände zwischen den Requests zu speichern.
|
||||||
Sind sie aktiviert, kann ein Session-Hash je Benutzer-Session verwendet werden.
|
Sind sie aktiviert, kann ein Session-Hash je Benutzer-Session verwendet werden.
|
||||||
|
@ -820,6 +851,7 @@ teilen:
|
||||||
|
|
||||||
set :session_secret, 'super secret'
|
set :session_secret, 'super secret'
|
||||||
|
|
||||||
|
|
||||||
== Anhalten
|
== Anhalten
|
||||||
|
|
||||||
Zum sofortigen Stoppen eines Request in einem Filter oder einer Route:
|
Zum sofortigen Stoppen eines Request in einem Filter oder einer Route:
|
||||||
|
@ -846,6 +878,7 @@ Natürlich ist es auch möglich, ein Template mit +halt+ zu verwenden:
|
||||||
|
|
||||||
halt erb(:error)
|
halt erb(:error)
|
||||||
|
|
||||||
|
|
||||||
== Weiterspringen
|
== Weiterspringen
|
||||||
|
|
||||||
Eine Route kann mittels <tt>pass</tt> zu der nächsten passenden Route springen:
|
Eine Route kann mittels <tt>pass</tt> zu der nächsten passenden Route springen:
|
||||||
|
@ -856,13 +889,14 @@ Eine Route kann mittels <tt>pass</tt> zu der nächsten passenden Route springen:
|
||||||
end
|
end
|
||||||
|
|
||||||
get '/raten/*' do
|
get '/raten/*' do
|
||||||
'Du hast mich verfehlt!'
|
'Du hast mich nicht!'
|
||||||
end
|
end
|
||||||
|
|
||||||
Der Block wird sofort verlassen und es wird nach der nächsten treffenden Route
|
Der Block wird sofort verlassen und es wird nach der nächsten treffenden Route
|
||||||
gesucht. Ein 404-Fehler wird zurückgegeben, wenn kein treffendes Routen-Muster
|
gesucht. Ein 404-Fehler wird zurückgegeben, wenn kein treffendes Routen-Muster
|
||||||
gefunden wird.
|
gefunden wird.
|
||||||
|
|
||||||
|
|
||||||
=== Eine andere Route ansteuern
|
=== Eine andere Route ansteuern
|
||||||
|
|
||||||
Manchmal entspricht +pass+ nicht den Anforderungen, wenn das Ergebnis einer
|
Manchmal entspricht +pass+ nicht den Anforderungen, wenn das Ergebnis einer
|
||||||
|
@ -878,15 +912,16 @@ anderen Route gefordert wird. Um das zu erreichen, lässt sich +call+ nutzen:
|
||||||
end
|
end
|
||||||
|
|
||||||
Beachte, dass in dem oben angegeben Beispiel die Performance erheblich erhöht
|
Beachte, dass in dem oben angegeben Beispiel die Performance erheblich erhöht
|
||||||
werden kann, wenn +"bar"+ in eine Helfer-Methode umgewandelt wird, auf die +/foo+
|
werden kann, wenn <tt>"bar"</tt> in eine Helfer-Methode umgewandelt wird, auf
|
||||||
und +/bar+ zugreifen können.
|
die <tt>/foo</tt> und <tt>/bar</tt> zugreifen können.
|
||||||
|
|
||||||
Wenn der Request innerhalb derselben Applikations-Instanz aufgerufen und keine
|
Wenn der Request innerhalb derselben Applikations-Instanz aufgerufen und keine
|
||||||
Kopie der Instanz erzeugt werden soll, kann +call!+ anstelle von
|
Kopie der Instanz erzeugt werden soll, kann <tt>call!</tt> anstelle von
|
||||||
+call+ verwendet werden.
|
+call+ verwendet werden.
|
||||||
|
|
||||||
Die Rack-Spezifikationen enthalten weitere Informationen zu +call+.
|
Die Rack-Spezifikationen enthalten weitere Informationen zu +call+.
|
||||||
|
|
||||||
|
|
||||||
=== Body, Status-Code und Header setzen
|
=== Body, Status-Code und Header setzen
|
||||||
|
|
||||||
Es ist möglich und empfohlen, den Status-Code sowie den Response-Body mit einem
|
Es ist möglich und empfohlen, den Status-Code sowie den Response-Body mit einem
|
||||||
|
@ -904,8 +939,8 @@ verwendet, lässt sich der Body jederzeit über diese Methode aufrufen:
|
||||||
end
|
end
|
||||||
|
|
||||||
Ebenso ist es möglich, einen Block an +body+ weiterzureichen, der dann vom
|
Ebenso ist es möglich, einen Block an +body+ weiterzureichen, der dann vom
|
||||||
Rack-Handler ausgeführt wird (lässt sich z.B. zur Umsetzung von Streaming einsetzen,
|
Rack-Handler ausgeführt wird (lässt sich z.B. zur Umsetzung von Streaming
|
||||||
siehe auch "Rückgabewerte").
|
einsetzen, siehe auch "Rückgabewerte").
|
||||||
|
|
||||||
Vergleichbar mit +body+ lassen sich auch Status-Code und Header setzen:
|
Vergleichbar mit +body+ lassen sich auch Status-Code und Header setzen:
|
||||||
|
|
||||||
|
@ -920,6 +955,7 @@ Vergleichbar mit +body+ lassen sich auch Status-Code und Header setzen:
|
||||||
Genau wie bei +body+ liest ein Aufrufen von +headers+ oder +status+ ohne
|
Genau wie bei +body+ liest ein Aufrufen von +headers+ oder +status+ ohne
|
||||||
Argumente den aktuellen Wert aus.
|
Argumente den aktuellen Wert aus.
|
||||||
|
|
||||||
|
|
||||||
== Mime-Types
|
== Mime-Types
|
||||||
|
|
||||||
Wenn <tt>send_file</tt> oder statische Dateien verwendet werden, kann es
|
Wenn <tt>send_file</tt> oder statische Dateien verwendet werden, kann es
|
||||||
|
@ -935,10 +971,11 @@ Es kann aber auch der +content_type+-Helfer verwendet werden:
|
||||||
"foo foo foo"
|
"foo foo foo"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== URLs generieren
|
=== URLs generieren
|
||||||
|
|
||||||
Zum Generieren von URLs sollte die +url+-Helfer-Methode genutzen werden, so z.B.
|
Zum Generieren von URLs sollte die +url+-Helfer-Methode genutzen werden, so
|
||||||
beim Einsatz von Haml:
|
z.B. beim Einsatz von Haml:
|
||||||
|
|
||||||
%a{:href => url('/foo')} foo
|
%a{:href => url('/foo')} foo
|
||||||
|
|
||||||
|
@ -947,6 +984,7 @@ Soweit vorhanden, wird Rücksicht auf Proxys und Rack-Router genommen.
|
||||||
Diese Methode ist ebenso über das Alias +to+ zu erreichen (siehe Beispiel
|
Diese Methode ist ebenso über das Alias +to+ zu erreichen (siehe Beispiel
|
||||||
unten).
|
unten).
|
||||||
|
|
||||||
|
|
||||||
=== Browser-Umleitung
|
=== Browser-Umleitung
|
||||||
|
|
||||||
Eine Browser-Umleitung kann mithilfe der +redirect+-Helfer-Methode erreicht
|
Eine Browser-Umleitung kann mithilfe der +redirect+-Helfer-Methode erreicht
|
||||||
|
@ -959,7 +997,7 @@ werden:
|
||||||
Weitere Parameter werden wie Argumente der +halt+-Methode behandelt:
|
Weitere Parameter werden wie Argumente der +halt+-Methode behandelt:
|
||||||
|
|
||||||
redirect to('/bar'), 303
|
redirect to('/bar'), 303
|
||||||
redirect 'http://google.com', 'Hier bist Du falsch'
|
redirect 'http://google.com', 'Hier bist du falsch'
|
||||||
|
|
||||||
Ebenso leicht lässt sich ein Schritt zurück mit dem Alias
|
Ebenso leicht lässt sich ein Schritt zurück mit dem Alias
|
||||||
<tt>redirect back</tt> erreichen:
|
<tt>redirect back</tt> erreichen:
|
||||||
|
@ -991,6 +1029,7 @@ oder eine Session verwendet werden:
|
||||||
session[:secret]
|
session[:secret]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== Dateien versenden
|
=== Dateien versenden
|
||||||
|
|
||||||
Zum Versenden von Dateien kann die <tt>send_file</tt>-Helfer-Methode verwendet
|
Zum Versenden von Dateien kann die <tt>send_file</tt>-Helfer-Methode verwendet
|
||||||
|
@ -1026,6 +1065,7 @@ Ruby-Prozess auch andere Möglichkeiten genutzt. Bei Verwendung der
|
||||||
<tt>send_file</tt>-Helfer-Methode kümmert sich Sinatra selbstständig um die
|
<tt>send_file</tt>-Helfer-Methode kümmert sich Sinatra selbstständig um die
|
||||||
Range-Requests.
|
Range-Requests.
|
||||||
|
|
||||||
|
|
||||||
== Das Request-Objekt
|
== Das Request-Objekt
|
||||||
|
|
||||||
Auf das +request+-Objekt der eigehenden Anfrage kann vom Anfrage-Scope aus
|
Auf das +request+-Objekt der eigehenden Anfrage kann vom Anfrage-Scope aus
|
||||||
|
@ -1075,6 +1115,7 @@ Der <tt>request.body</tt> ist ein IO- oder StringIO-Objekt:
|
||||||
"Hallo #{daten['name']}!"
|
"Hallo #{daten['name']}!"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== Anhänge
|
=== Anhänge
|
||||||
|
|
||||||
Damit der Browser erkennt, dass ein Response gespeichert und nicht im Browser
|
Damit der Browser erkennt, dass ein Response gespeichert und nicht im Browser
|
||||||
|
@ -1138,6 +1179,7 @@ Template-Pfade samt Inhalt gecached, solange nicht im Entwicklungsmodus
|
||||||
gearbeitet wird. Das sollte im Hinterkopf behalten werden, wenn irgendwelche
|
gearbeitet wird. Das sollte im Hinterkopf behalten werden, wenn irgendwelche
|
||||||
verrückten Methoden zusammenbastelt werden.
|
verrückten Methoden zusammenbastelt werden.
|
||||||
|
|
||||||
|
|
||||||
== Konfiguration
|
== Konfiguration
|
||||||
|
|
||||||
Wird einmal beim Starten in jedweder Umgebung ausgeführt:
|
Wird einmal beim Starten in jedweder Umgebung ausgeführt:
|
||||||
|
@ -1185,6 +1227,7 @@ Diese Einstellungen sind über +settings+ erreichbar:
|
||||||
...
|
...
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== Mögliche Einstellungen
|
=== Mögliche Einstellungen
|
||||||
|
|
||||||
[absolute_redirects] Wenn ausgeschaltet, wird Sinatra relative Redirects
|
[absolute_redirects] Wenn ausgeschaltet, wird Sinatra relative Redirects
|
||||||
|
@ -1192,10 +1235,10 @@ Diese Einstellungen sind über +settings+ erreichbar:
|
||||||
(HTTP 1.1) konform, das nur absolute Redirects zulässt.
|
(HTTP 1.1) konform, das nur absolute Redirects zulässt.
|
||||||
|
|
||||||
Sollte eingeschaltet werden, wenn die Applikation hinter
|
Sollte eingeschaltet werden, wenn die Applikation hinter
|
||||||
einem Reverse-Proxy liegt, der nicht ordentlich eingerichtet
|
einem Reverse-Proxy liegt, der nicht ordentlich
|
||||||
ist. Beachte, dass die +url+-Helfer-Methode nach wie vor
|
eingerichtet ist. Beachte, dass die +url+-Helfer-Methode
|
||||||
absolute URLs erstellen wird, es sei denn, es wird als
|
nach wie vor absolute URLs erstellen wird, es sei denn,
|
||||||
zweiter Parameter +false+ angegeben.
|
es wird als zweiter Parameter +false+ angegeben.
|
||||||
|
|
||||||
Standardmäßig nicht aktiviert.
|
Standardmäßig nicht aktiviert.
|
||||||
|
|
||||||
|
@ -1283,12 +1326,14 @@ Diese Einstellungen sind über +settings+ erreichbar:
|
||||||
|
|
||||||
[views] Verzeichnis der Views.
|
[views] Verzeichnis der Views.
|
||||||
|
|
||||||
|
|
||||||
== Fehlerbehandlung
|
== Fehlerbehandlung
|
||||||
|
|
||||||
Error-Handler laufen in demselben Kontext wie Routen und Filter, was bedeutet,
|
Error-Handler laufen in demselben Kontext wie Routen und Filter, was bedeutet,
|
||||||
dass alle Goodies wie <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc.
|
dass alle Goodies wie <tt>haml</tt>, <tt>erb</tt>, <tt>halt</tt>, etc.
|
||||||
verwendet werden können.
|
verwendet werden können.
|
||||||
|
|
||||||
|
|
||||||
=== Nicht gefunden
|
=== Nicht gefunden
|
||||||
|
|
||||||
Wenn eine <tt>Sinatra::NotFound</tt>-Exception geworfen wird oder der
|
Wenn eine <tt>Sinatra::NotFound</tt>-Exception geworfen wird oder der
|
||||||
|
@ -1298,6 +1343,7 @@ Statuscode 404 ist, wird der <tt>not_found</tt>-Handler ausgeführt:
|
||||||
'Seite kann nirgendwo gefunden werden.'
|
'Seite kann nirgendwo gefunden werden.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
=== Fehler
|
=== Fehler
|
||||||
|
|
||||||
Der +error+-Handler wird immer ausgeführt, wenn eine Exception in einem
|
Der +error+-Handler wird immer ausgeführt, wenn eine Exception in einem
|
||||||
|
@ -1311,18 +1357,18 @@ Routen-Block oder in einem Filter geworfen wurde. Die Exception kann über die
|
||||||
Benutzerdefinierte Fehler:
|
Benutzerdefinierte Fehler:
|
||||||
|
|
||||||
error MeinFehler do
|
error MeinFehler do
|
||||||
'Was passiert ist...' + request.env['sinatra.error'].message
|
'Au weia, ' + request.env['sinatra.error'].message
|
||||||
end
|
end
|
||||||
|
|
||||||
Dann, wenn das passiert:
|
Dann, wenn das passiert:
|
||||||
|
|
||||||
get '/' do
|
get '/' do
|
||||||
raise MeinFehler, 'etwas Schlechtes'
|
raise MeinFehler, 'etwas Schlimmes ist passiert'
|
||||||
end
|
end
|
||||||
|
|
||||||
bekommt man dieses:
|
bekommt man dieses:
|
||||||
|
|
||||||
Was passiert ist... etwas schlechtes
|
Au weia, etwas Schlimmes ist passiert
|
||||||
|
|
||||||
Alternativ kann ein Error-Handler auch für einen Status-Code definiert werden:
|
Alternativ kann ein Error-Handler auch für einen Status-Code definiert werden:
|
||||||
|
|
||||||
|
@ -1337,22 +1383,23 @@ Alternativ kann ein Error-Handler auch für einen Status-Code definiert werden:
|
||||||
Oder ein Status-Code-Bereich:
|
Oder ein Status-Code-Bereich:
|
||||||
|
|
||||||
error 400..510 do
|
error 400..510 do
|
||||||
'Bums'
|
'Hallo?'
|
||||||
end
|
end
|
||||||
|
|
||||||
Sinatra setzt verschiedene <tt>not_found</tt>- und <tt>error</tt>-Handler in
|
Sinatra setzt verschiedene <tt>not_found</tt>- und <tt>error</tt>-Handler in
|
||||||
der Development-Umgebung.
|
der Development-Umgebung.
|
||||||
|
|
||||||
|
|
||||||
== Rack-Middleware
|
== Rack-Middleware
|
||||||
|
|
||||||
Sinatra baut auf Rack[http://rack.rubyforge.org/], einem minimalistischen
|
Sinatra baut auf Rack[http://rack.rubyforge.org/], einem minimalistischen
|
||||||
Standard-Interface für Ruby-Webframeworks. Eines der interessantesten
|
Standard-Interface für Ruby-Webframeworks. Eines der interessantesten
|
||||||
Features für Entwickler ist der Support von Middlewares, die
|
Features für Entwickler ist der Support von Middlewares, die zwischen den
|
||||||
zwischen den Server und die Anwendung geschaltet werden und so HTTP-Request
|
Server und die Anwendung geschaltet werden und so HTTP-Request und/oder Antwort
|
||||||
und/oder -Antwort überwachen und/oder manipulieren können.
|
überwachen und/oder manipulieren können.
|
||||||
|
|
||||||
Sinatra macht das Erstellen von Middleware-Verkettungen mit der Top-Level-Methode
|
Sinatra macht das Erstellen von Middleware-Verkettungen mit der
|
||||||
+use+ zu einem Kinderspiel:
|
Top-Level-Methode +use+ zu einem Kinderspiel:
|
||||||
|
|
||||||
require 'sinatra'
|
require 'sinatra'
|
||||||
require 'meine_middleware'
|
require 'meine_middleware'
|
||||||
|
@ -1374,9 +1421,10 @@ Rack::Builder[http://rack.rubyforge.org/doc/classes/Rack/Builder.html]-DSL
|
||||||
end
|
end
|
||||||
|
|
||||||
Rack bietet eine Vielzahl von Standard-Middlewares für Logging, Debugging,
|
Rack bietet eine Vielzahl von Standard-Middlewares für Logging, Debugging,
|
||||||
URL-Routing, Authentifizierung und Session-Verarbeitung.
|
URL-Routing, Authentifizierung und Session-Verarbeitung. Sinatra verwendet
|
||||||
Sinatra verwendet viele von diesen Komponenten automatisch, abhängig von der
|
viele von diesen Komponenten automatisch, abhängig von der Konfiguration. So
|
||||||
Konfiguration. So muss +use+ häufig nicht explizit verwendet werden.
|
muss +use+ häufig nicht explizit verwendet werden.
|
||||||
|
|
||||||
|
|
||||||
== Testen
|
== Testen
|
||||||
|
|
||||||
|
@ -1410,20 +1458,21 @@ werden. {Rack::Test}[http://gitrdoc.com/brynary/rack-test] wird empfohlen:
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Anmerkung: Das eingebaute Sinatra::Test-Modul und die Sinatra::TestHarness-Klasse
|
Anmerkung: Das eingebaute Sinatra::Test-Modul und die
|
||||||
werden seit Version 0.9.2 nicht mehr unterstützt.
|
Sinatra::TestHarness-Klasse werden seit Version 0.9.2 nicht mehr unterstützt.
|
||||||
|
|
||||||
|
|
||||||
== Sinatra::Base - Middleware, Bibliotheken und modulare Anwendungen
|
== Sinatra::Base - Middleware, Bibliotheken und modulare Anwendungen
|
||||||
|
|
||||||
Das Definieren einer Top-Level-Anwendung funktioniert gut für
|
Das Definieren einer Top-Level-Anwendung funktioniert gut für
|
||||||
Mikro-Anwendungen, hat aber Nachteile, wenn wiederverwendbare Komponenten
|
Mikro-Anwendungen, hat aber Nachteile, wenn wiederverwendbare Komponenten wie
|
||||||
wie Middleware, Rails Metal, einfache Bibliotheken mit Server-Komponenten
|
Middleware, Rails Metal, einfache Bibliotheken mit Server-Komponenten oder auch
|
||||||
oder auch Sinatra-Erweiterungen geschrieben werden sollen.
|
Sinatra-Erweiterungen geschrieben werden sollen.
|
||||||
|
|
||||||
Die Top-Level-DSL belastet den Objekt-Namespace und setzt einen
|
Die Top-Level-DSL belastet den Objekt-Namespace und setzt einen
|
||||||
Mikro-Anwendungsstil voraus (eine einzelne Anwendungsdatei, ./public und ./views
|
Mikro-Anwendungsstil voraus (eine einzelne Anwendungsdatei, ./public und
|
||||||
Ordner, Logging, Exception-Detail-Seite, usw.). Genau hier kommt Sinatra::Base
|
./views Ordner, Logging, Exception-Detail-Seite, usw.). Genau hier kommt
|
||||||
ins Spiel:
|
Sinatra::Base ins Spiel:
|
||||||
|
|
||||||
require 'sinatra/base'
|
require 'sinatra/base'
|
||||||
|
|
||||||
|
@ -1438,13 +1487,13 @@ ins Spiel:
|
||||||
|
|
||||||
Die MyApp-Klasse ist eine unabhängige Rack-Komponente, die als Middleware,
|
Die MyApp-Klasse ist eine unabhängige Rack-Komponente, die als Middleware,
|
||||||
Endpunkt oder via Rails Metal verwendet werden kann. Verwendet wird sie durch
|
Endpunkt oder via Rails Metal verwendet werden kann. Verwendet wird sie durch
|
||||||
+use+ oder +run+ von einer Rackup-+config.ru+-Datei oder als Server-Komponente
|
+use+ oder +run+ von einer Rackup-<tt>config.ru</tt>-Datei oder als
|
||||||
einer Bibliothek:
|
Server-Komponente einer Bibliothek:
|
||||||
|
|
||||||
MyApp.run! :host => 'localhost', :port => 9090
|
MyApp.run! :host => 'localhost', :port => 9090
|
||||||
|
|
||||||
Die Methoden der Sinatra::Base-Subklasse sind genau dieselben wie die
|
Die Methoden der Sinatra::Base-Subklasse sind genau dieselben wie die der
|
||||||
der Top-Level-DSL. Die meisten Top-Level-Anwendungen können mit nur zwei
|
Top-Level-DSL. Die meisten Top-Level-Anwendungen können mit nur zwei
|
||||||
Veränderungen zu Sinatra::Base-Komponenten konvertiert werden:
|
Veränderungen zu Sinatra::Base-Komponenten konvertiert werden:
|
||||||
|
|
||||||
* Die Datei sollte <tt>require 'sinatra/base'</tt> anstelle von
|
* Die Datei sollte <tt>require 'sinatra/base'</tt> anstelle von
|
||||||
|
@ -1458,6 +1507,7 @@ per Standard deaktiviert. Das betrifft auch den eingebauten Server. Siehe
|
||||||
{Optionen und Konfiguration}[http://sinatra.github.com/configuration.html] für
|
{Optionen und Konfiguration}[http://sinatra.github.com/configuration.html] für
|
||||||
Details über mögliche Optionen.
|
Details über mögliche Optionen.
|
||||||
|
|
||||||
|
|
||||||
=== Modularer vs. klassischer Stil
|
=== Modularer vs. klassischer Stil
|
||||||
|
|
||||||
Entgegen häufiger Meinungen gibt es nichts gegen den klassischen Stil
|
Entgegen häufiger Meinungen gibt es nichts gegen den klassischen Stil
|
||||||
|
@ -1518,6 +1568,7 @@ Starte:
|
||||||
|
|
||||||
rackup -p 4567
|
rackup -p 4567
|
||||||
|
|
||||||
|
|
||||||
=== Eine klassische Anwendung mit einer config.ru verwenden
|
=== Eine klassische Anwendung mit einer config.ru verwenden
|
||||||
|
|
||||||
Schreibe eine Anwendungsdatei:
|
Schreibe eine Anwendungsdatei:
|
||||||
|
@ -1534,6 +1585,7 @@ sowie eine dazugehörige <tt>config.ru</tt>-Datei:
|
||||||
require 'app'
|
require 'app'
|
||||||
run Sinatra::Application
|
run Sinatra::Application
|
||||||
|
|
||||||
|
|
||||||
=== Wann sollte eine config.ru-Datei verwendet werden?
|
=== Wann sollte eine config.ru-Datei verwendet werden?
|
||||||
|
|
||||||
Anzeichen dafür, dass eine <tt>config.ru</tt>-Datei gebraucht wird:
|
Anzeichen dafür, dass eine <tt>config.ru</tt>-Datei gebraucht wird:
|
||||||
|
@ -1544,15 +1596,17 @@ Anzeichen dafür, dass eine <tt>config.ru</tt>-Datei gebraucht wird:
|
||||||
* Sinatra soll als Middleware verwendet werden, nicht als Endpunkt.
|
* Sinatra soll als Middleware verwendet werden, nicht als Endpunkt.
|
||||||
|
|
||||||
<b>Es gibt keinen Grund, eine <tt>config.ru</tt>-Datei zu verwenden, nur weil
|
<b>Es gibt keinen Grund, eine <tt>config.ru</tt>-Datei zu verwenden, nur weil
|
||||||
eine Anwendung im modularen Stil betrieben werden soll. Ebenso wird keine Anwendung
|
eine Anwendung im modularen Stil betrieben werden soll. Ebenso wird keine
|
||||||
mit modularem Stil benötigt, um eine <tt>config.ru</tt>-Datei zu verwenden.</b>
|
Anwendung mit modularem Stil benötigt, um eine <tt>config.ru</tt>-Datei zu
|
||||||
|
verwenden.</b>
|
||||||
|
|
||||||
|
|
||||||
=== Sinatra als Middleware nutzen
|
=== Sinatra als Middleware nutzen
|
||||||
|
|
||||||
Es ist nicht nur möglich, andere Rack-Middleware mit Sinatra zu nutzen, es kann
|
Es ist nicht nur möglich, andere Rack-Middleware mit Sinatra zu nutzen, es kann
|
||||||
außerdem jede Sinatra-Anwendung selbst als Middleware vor jeden beliebigen Rack-
|
außerdem jede Sinatra-Anwendung selbst als Middleware vor jeden beliebigen
|
||||||
Endpunkt gehangen werden. Bei diesem Endpunkt muss es sich nicht um eine andere
|
Rack-Endpunkt gehangen werden. Bei diesem Endpunkt muss es sich nicht um eine
|
||||||
Sinatra-Anwendung handeln, es kann jede andere Rack-Anwendung sein
|
andere Sinatra-Anwendung handeln, es kann jede andere Rack-Anwendung sein
|
||||||
(Rails/Ramaze/Camping/...):
|
(Rails/Ramaze/Camping/...):
|
||||||
|
|
||||||
require 'sinatra/base'
|
require 'sinatra/base'
|
||||||
|
@ -1584,20 +1638,21 @@ Sinatra-Anwendung handeln, es kann jede andere Rack-Anwendung sein
|
||||||
get('/') { "Hallo #{session['user_name']}." }
|
get('/') { "Hallo #{session['user_name']}." }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
== Geltungsbereich und Bindung
|
== Geltungsbereich und Bindung
|
||||||
|
|
||||||
Der Geltungsbereich (Scope) legt fest, welche Methoden und Variablen zur
|
Der Geltungsbereich (Scope) legt fest, welche Methoden und Variablen zur
|
||||||
Verfügung stehen.
|
Verfügung stehen.
|
||||||
|
|
||||||
|
|
||||||
=== Anwendungs- oder Klassen-Scope
|
=== Anwendungs- oder Klassen-Scope
|
||||||
|
|
||||||
Jede Sinatra-Anwendung entspricht einer Sinatra::Base-Subklasse. Falls die Top-
|
Jede Sinatra-Anwendung entspricht einer Sinatra::Base-Subklasse. Falls die Top-
|
||||||
Level-DSL verwendet wird (<tt>require 'sinatra'</tt>), handelt es sich
|
Level-DSL verwendet wird (<tt>require 'sinatra'</tt>), handelt es sich um
|
||||||
um Sinatra::Application, andernfalls ist es jene Subklasse, die explizit
|
Sinatra::Application, andernfalls ist es jene Subklasse, die explizit angelegt
|
||||||
angelegt wurde. Auf Klassenebene stehen Methoden wie +get+ oder +before+
|
wurde. Auf Klassenebene stehen Methoden wie +get+ oder +before+ zur Verfügung,
|
||||||
zur Verfügung, es gibt aber keinen Zugriff auf das +request+-Object oder die
|
es gibt aber keinen Zugriff auf das +request+-Object oder die +session+, da nur
|
||||||
+session+, da nur eine einzige Klasse für alle eingehenden Anfragen genutzt
|
eine einzige Klasse für alle eingehenden Anfragen genutzt wird.
|
||||||
wird.
|
|
||||||
|
|
||||||
Optionen, die via +set+ gesetzt werden, sind Methoden auf Klassenebene:
|
Optionen, die via +set+ gesetzt werden, sind Methoden auf Klassenebene:
|
||||||
|
|
||||||
|
@ -1624,6 +1679,7 @@ Auf das Scope-Objekt (die Klasse) kann wie folgt zugegriffen werden:
|
||||||
{ |c| ... }</tt>).
|
{ |c| ... }</tt>).
|
||||||
* +settings+ aus den anderen Scopes heraus.
|
* +settings+ aus den anderen Scopes heraus.
|
||||||
|
|
||||||
|
|
||||||
=== Anfrage- oder Instanz-Scope
|
=== Anfrage- oder Instanz-Scope
|
||||||
|
|
||||||
Für jede eingehende Anfrage wird eine neue Instanz der Anwendungs-Klasse
|
Für jede eingehende Anfrage wird eine neue Instanz der Anwendungs-Klasse
|
||||||
|
@ -1635,7 +1691,7 @@ Anwendungs-Scope zugegriffen werden:
|
||||||
class MyApp < Sinatra::Base
|
class MyApp < Sinatra::Base
|
||||||
# Hey, ich bin im Anwendungs-Scope!
|
# Hey, ich bin im Anwendungs-Scope!
|
||||||
get '/neue_route/:name' do
|
get '/neue_route/:name' do
|
||||||
# Anfragescope für '/neue_route/:name'
|
# Anfrage-Scope für '/neue_route/:name'
|
||||||
@value = 42
|
@value = 42
|
||||||
|
|
||||||
settings.get "/#{params[:name]}" do
|
settings.get "/#{params[:name]}" do
|
||||||
|
@ -1654,6 +1710,7 @@ Im Anfrage-Scope befindet man sich:
|
||||||
* In Helfer-Methoden
|
* In Helfer-Methoden
|
||||||
* In Templates
|
* In Templates
|
||||||
|
|
||||||
|
|
||||||
=== Delegation-Scope
|
=== Delegation-Scope
|
||||||
|
|
||||||
Vom Delegation-Scope aus werden Methoden einfach an den Klassen-Scope
|
Vom Delegation-Scope aus werden Methoden einfach an den Klassen-Scope
|
||||||
|
@ -1661,8 +1718,8 @@ weitergeleitet. Dieser verhält sich jedoch nicht 100%ig wie der Klassen-Scope,
|
||||||
da man nicht die Bindung der Klasse besitzt: Nur Methoden, die explizit als
|
da man nicht die Bindung der Klasse besitzt: Nur Methoden, die explizit als
|
||||||
delegierbar markiert wurden, stehen hier zur Verfügung und es kann nicht auf
|
delegierbar markiert wurden, stehen hier zur Verfügung und es kann nicht auf
|
||||||
die Variablen des Klassenscopes zugegriffen werden (mit anderen Worten: es gibt
|
die Variablen des Klassenscopes zugegriffen werden (mit anderen Worten: es gibt
|
||||||
ein anderes +self+). Weitere Delegationen können mit <tt>Sinatra::Delegator.delegate
|
ein anderes +self+). Weitere Delegationen können mit
|
||||||
:methoden_name</tt> hinzugefügt werden.
|
<tt>Sinatra::Delegator.delegate :methoden_name</tt> hinzugefügt werden.
|
||||||
|
|
||||||
Im Delegation-Scop befindet man sich:
|
Im Delegation-Scop befindet man sich:
|
||||||
|
|
||||||
|
@ -1675,6 +1732,7 @@ Schau am besten im Code nach: Hier ist
|
||||||
definiert und wird in den
|
definiert und wird in den
|
||||||
{globalen Namespace eingebunden}[http://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb#L25].
|
{globalen Namespace eingebunden}[http://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb#L25].
|
||||||
|
|
||||||
|
|
||||||
== Kommandozeile
|
== Kommandozeile
|
||||||
|
|
||||||
Sinatra-Anwendungen können direkt von der Kommandozeile aus gestartet werden:
|
Sinatra-Anwendungen können direkt von der Kommandozeile aus gestartet werden:
|
||||||
|
@ -1690,6 +1748,7 @@ Die Optionen sind:
|
||||||
-s # Rack-Server/Handler setzen (Standard ist thin)
|
-s # Rack-Server/Handler setzen (Standard ist thin)
|
||||||
-x # Mutex-Lock einschalten (Standard ist off)
|
-x # Mutex-Lock einschalten (Standard ist off)
|
||||||
|
|
||||||
|
|
||||||
== Systemanforderungen
|
== Systemanforderungen
|
||||||
|
|
||||||
Es wird empfohlen, Sinatra unter Ruby 1.8.7, 1.9.2, JRuby oder Rubinius zu
|
Es wird empfohlen, Sinatra unter Ruby 1.8.7, 1.9.2, JRuby oder Rubinius zu
|
||||||
|
@ -1716,14 +1775,16 @@ Die folgenden Versionen werden offiziell unterstützt:
|
||||||
verwendet werden, da unter Sinatra immer wieder Segfaults auftreten.
|
verwendet werden, da unter Sinatra immer wieder Segfaults auftreten.
|
||||||
|
|
||||||
[ Rubinius ]
|
[ Rubinius ]
|
||||||
Rubinius (rbx >= 1.2.2) wird offiziell unter Ausnahme von Textile-
|
Rubinius (rbx >= 1.2.3) wird offiziell unter Einbezug aller Templates
|
||||||
Templates unterstützt.
|
unterstützt.
|
||||||
|
|
||||||
[ JRuby ]
|
[ JRuby ]
|
||||||
JRuby wird offiziell unterstützt (JRuby >= 1.5.6). Probleme mit Template-
|
JRuby wird offiziell unterstützt (JRuby >= 1.6.0). Probleme mit Template-
|
||||||
Bibliotheken Dritter sind nicht bekannt. Falls JRuby zum Einsatz kommt, sollte
|
Bibliotheken Dritter sind nicht bekannt. Falls JRuby zum Einsatz kommt,
|
||||||
aber darauf geachtet werden, dass ein JRuby-Rack-Handler zum Einsatz kommt –
|
sollte aber darauf geachtet werden, dass ein JRuby-Rack-Handler zum Einsatz
|
||||||
der Thin-Web-Server wird bisher nicht unterstütz.
|
kommt – der Thin-Web-Server wird bisher nicht unterstütz. JRubys
|
||||||
|
Unterstützung für C-Erweiterungen sind zur Zeit noch experimenteller Natur,
|
||||||
|
betrifft im Moment aber nur RDiscount.
|
||||||
|
|
||||||
Weiterhin werden wir auf kommende Ruby-Versionen ein Auge haben.
|
Weiterhin werden wir auf kommende Ruby-Versionen ein Auge haben.
|
||||||
|
|
||||||
|
@ -1731,26 +1792,32 @@ Die nachfolgend aufgeführten Ruby-Implementationen werden offiziell nicht von
|
||||||
Sinatra unterstützt, funktionieren aber normalerweise:
|
Sinatra unterstützt, funktionieren aber normalerweise:
|
||||||
|
|
||||||
* Ältere Versionen von JRuby und Rubinius
|
* Ältere Versionen von JRuby und Rubinius
|
||||||
* MacRuby
|
* MacRuby, Maglev, IronRuby
|
||||||
* Maglev
|
|
||||||
* IronRuby
|
|
||||||
* Ruby 1.9.0 und 1.9.1
|
* Ruby 1.9.0 und 1.9.1
|
||||||
|
|
||||||
Nicht offiziell unterstützt bedeutet, dass wenn Sachen nicht funktionieren,
|
Nicht offiziell unterstützt bedeutet, dass wenn Sachen nicht funktionieren,
|
||||||
wir davon ausgehen, dass es nicht an Sinatra sondern an der jeweiligen
|
wir davon ausgehen, dass es nicht an Sinatra sondern an der jeweiligen
|
||||||
Implentierung liegt.
|
Implentierung liegt.
|
||||||
|
|
||||||
|
Im Rahmen unserer CI (Kontinuierlichen Integration) wird bereits ruby-head
|
||||||
|
(das kommende Ruby 1.9.3) mit eingebunden. Da noch alles im Fluss ist, kann zur
|
||||||
|
Zeit für nichts garantiert werden. Es kann aber erwartet werden, dass Ruby
|
||||||
|
1.9.3p0 von Sinatra unterstützt werden wird.
|
||||||
|
|
||||||
Sinatra sollte auf jedem Betriebssystem laufen, dass den gewählten Ruby-
|
Sinatra sollte auf jedem Betriebssystem laufen, dass den gewählten Ruby-
|
||||||
Interpreter unterstützt.
|
Interpreter unterstützt.
|
||||||
|
|
||||||
|
|
||||||
== Der neueste Stand (The Bleeding Edge)
|
== Der neueste Stand (The Bleeding Edge)
|
||||||
Um auf dem neusten Stand zu bleiben, kann der Master-Branch verwendet werden.
|
Um auf dem neusten Stand zu bleiben, kann der Master-Branch verwendet werden.
|
||||||
Er sollte recht stabil sein. Ebenso gibt es von Zeit zu Zeit prerelease Gems, die
|
Er sollte recht stabil sein. Ebenso gibt es von Zeit zu Zeit prerelease Gems,
|
||||||
du so installierst:
|
die so installiert werden:
|
||||||
|
|
||||||
gem install sinatra --pre
|
gem install sinatra --pre
|
||||||
|
|
||||||
|
|
||||||
=== Mit Bundler
|
=== Mit Bundler
|
||||||
|
|
||||||
Wenn die Applikation mit der neuesten Version von Sinatra und
|
Wenn die Applikation mit der neuesten Version von Sinatra und
|
||||||
{Bundler}[http://gembundler.com/] genutzt werden soll, schlagen wir folgenden
|
{Bundler}[http://gembundler.com/] genutzt werden soll, schlagen wir folgenden
|
||||||
Weg vor:
|
Weg vor:
|
||||||
|
@ -1777,6 +1844,7 @@ Jetzt kannst du deine Applikation starten:
|
||||||
|
|
||||||
bundle exec ruby myapp.rb
|
bundle exec ruby myapp.rb
|
||||||
|
|
||||||
|
|
||||||
=== Eigenes Repository
|
=== Eigenes Repository
|
||||||
Um auf dem neuesten Stand von Sinatras Code zu sein, kann eine lokale Kopie
|
Um auf dem neuesten Stand von Sinatras Code zu sein, kann eine lokale Kopie
|
||||||
angelegt werden. Gestartet wird in der Anwendung mit dem <tt>sinatra/lib</tt>-
|
angelegt werden. Gestartet wird in der Anwendung mit dem <tt>sinatra/lib</tt>-
|
||||||
|
@ -1802,6 +1870,7 @@ Um Sinatra-Code von Zeit zu Zeit zu aktualisieren:
|
||||||
cd myproject/sinatra
|
cd myproject/sinatra
|
||||||
git pull
|
git pull
|
||||||
|
|
||||||
|
|
||||||
=== Gem erstellen
|
=== Gem erstellen
|
||||||
|
|
||||||
Aus der eigenen lokalen Kopie kann nun auch ein globales Gem gebaut werden:
|
Aus der eigenen lokalen Kopie kann nun auch ein globales Gem gebaut werden:
|
||||||
|
@ -1811,15 +1880,17 @@ Aus der eigenen lokalen Kopie kann nun auch ein globales Gem gebaut werden:
|
||||||
rake sinatra.gemspec
|
rake sinatra.gemspec
|
||||||
rake install
|
rake install
|
||||||
|
|
||||||
Falls Gems als Root installiert werden sollen, sollte die letzte Zeile folgendermaßen
|
Falls Gems als Root installiert werden sollen, sollte die letzte Zeile
|
||||||
lauten:
|
folgendermaßen lauten:
|
||||||
|
|
||||||
sudo rake install
|
sudo rake install
|
||||||
|
|
||||||
|
|
||||||
== Versions-Verfahren
|
== Versions-Verfahren
|
||||||
|
|
||||||
Sinatra folgt dem sogenannten {Semantic Versioning}[http://semver.org/], d.h. SemVer
|
Sinatra folgt dem sogenannten {Semantic Versioning}[http://semver.org/], d.h.
|
||||||
und SemVerTag.
|
SemVer und SemVerTag.
|
||||||
|
|
||||||
|
|
||||||
== Mehr
|
== Mehr
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue