1
0
Fork 0
mirror of https://github.com/sinatra/sinatra synced 2023-03-27 23:18:01 -04:00

prettify the German README

[ci-skip]
This commit is contained in:
burningTyger 2013-03-24 21:42:36 +01:00
parent 35baa57283
commit c4d88f47f9

View file

@ -1,32 +1,36 @@
# Sinatra # Sinatra
*Wichtig: Dieses Dokument ist eine Übersetzung aus dem Englischen und unter *Wichtig: Dieses Dokument ist eine Übersetzung aus dem Englischen und unter
Umständen nicht auf dem aktuellen Stand.* Umständen nicht auf dem aktuellen Stand (aktuell Sinatra 1.4.2).*
Sinatra ist eine Sinatra ist eine
[DSL](http://de.wikipedia.org/wiki/Domänenspezifische_Sprache), die das [DSL](http://de.wikipedia.org/wiki/Domänenspezifische_Sprache), die das
schnelle Erstellen von Webanwendungen in Ruby mit minimalem Aufwand schnelle Erstellen von Webanwendungen in Ruby mit minimalem Aufwand
ermöglicht: ermöglicht:
Sinatra via `rubygems` installieren:
```shell
gem install sinatra
```
Eine Date mit dem Namen `myapp.rb` erstellen:
```ruby ```ruby
# myapp.rb
require 'sinatra' require 'sinatra'
get '/' do get '/' do
'Hallo Welt!' 'Hallo Welt!'
end end
``` ```
Einfach via `rubygems` installieren und starten: und im gleichen Verzeichnis ausführen:
```ruby ```shell
gem install sinatra
ruby myapp.rb ruby myapp.rb
``` ```
Die Seite kann nun unter http://localhost:4567 betrachtet werden. Die Seite kann nun unter [http://localhost:4567](http://localhost:4567)
aufgerufen werden.
Es wird empfohlen, den Thin-Server via `gem install thin` zu installieren, den
Sinatra dann, soweit vorhanden, automatisch verwendet.
## Inhalt ## Inhalt
@ -145,7 +149,6 @@ end
unlink '/' do unlink '/' do
.. trenne etwas .. .. trenne etwas ..
end end
``` ```
Die Routen werden in der Reihenfolge durchlaufen, in der sie definiert wurden. Die Routen werden in der Reihenfolge durchlaufen, in der sie definiert wurden.
@ -157,7 +160,7 @@ Die Muster der Routen können benannte Parameter beinhalten, die über den
```ruby ```ruby
get '/hallo/:name' do get '/hallo/:name' do
# passt auf "GET /hallo/foo" und "GET /hallo/bar" # passt auf "GET /hallo/foo" und "GET /hallo/bar"
# params[:name] ist 'foo' oder 'bar' # params[:name] ist dann 'foo' oder 'bar'
"Hallo #{params[:name]}!" "Hallo #{params[:name]}!"
end end
``` ```
@ -166,16 +169,17 @@ Man kann auf diese auch mit Block-Parametern zugreifen:
```ruby ```ruby
get '/hallo/:name' do |n| get '/hallo/:name' do |n|
# n entspricht hier params[:name]
"Hallo #{n}!" "Hallo #{n}!"
end end
``` ```
Routen-Muster können auch mit Splat- oder Wildcard-Parametern über das Routen-Muster können auch mit sog. Splat- oder Wildcard-Parametern über das
`params[:splat]`-Array angesprochen werden: `params[:splat]`-Array angesprochen werden:
```ruby ```ruby
get '/sag/*/zu/*' do get '/sag/*/zu/*' do
# passt auf /sag/hallo/zu/welt # passt z.B. auf /sag/hallo/zu/welt
params[:splat] # => ["hallo", "welt"] params[:splat] # => ["hallo", "welt"]
end end
@ -224,21 +228,25 @@ Abgleich mit den Routen modifiziert wird.
### Bedingungen ### Bedingungen
An Routen können eine Vielzahl von Bedingungen angehängt werden, die erfüllt An Routen können eine Vielzahl von Bedingungen geknüpft werden, die erfüllt
sein müssen, damit der Block ausgeführt wird. Möglich wäre etwa eine sein müssen, damit der Block ausgeführt wird. Möglich wäre etwa eine
Einschränkung des User-Agents: Einschränkung des User-Agents über die interne Bedingung `:agent`:
```ruby ```ruby
get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
"Du verwendest Songbird Version #{params[:agent][0]}" "Du verwendest Songbird Version #{params[:agent][0]}"
end end
```
Wird Songbird als Browser nicht verwendet, springt Sinatra zur nächsten Route:
```ruby
get '/foo' do get '/foo' do
# passt auf andere Browser # passt auf andere Browser
end end
``` ```
Andere mitgelieferte Bedingungen sind `host_name` und `provides`: Andere mitgelieferte Bedingungen sind `:host_name` und `:provides`:
```ruby ```ruby
get '/', :host_name => /^admin\./ do get '/', :host_name => /^admin\./ do
@ -254,12 +262,12 @@ get '/', :provides => ['rss', 'atom', 'xml'] do
end end
``` ```
Es können auch andere Bedingungen relativ einfach hinzugefügt werden: Eigene Bedingungen können relativ einfach hinzugefügt werden:
```ruby ```ruby
set(:probability) { |value| condition { rand <= value } } set(:wahrscheinlichkeit) { |value| condition { rand <= value } }
get '/auto_gewinnen', :probability => 0.1 do get '/auto_gewinnen', :wahrscheinlichkeit => 0.1 do
"Du hast gewonnen!" "Du hast gewonnen!"
end end
@ -308,7 +316,6 @@ einen Rack-Rückgabewert, einen Rack-Body oder einen HTTP-Status-Code handelt:
Block nur mit Strings als Übergabewerte aufruft. 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:
```ruby ```ruby
@ -370,16 +377,17 @@ get %r{^(?!/index$)} do
# ... # ...
end end
``` ```
## Statische Dateien ## Statische Dateien
Statische Dateien werden aus dem `./public`-Ordner ausgeliefert. Es ist möglich, Statische Dateien werden im `./public`-Ordner erwartet. Es ist möglich,
einen anderen Ort zu definieren, indem man die `:public_folder`-Option setzt: einen anderen Ort zu definieren, indem man die `:public_folder`-Option setzt:
```ruby ```ruby
set :public_folder, File.dirname(__FILE__) + '/static' set :public_folder, File.dirname(__FILE__) + '/static'
``` ```
Zu beachten ist, dass der Ordnername public nicht Teil der URL ist. Die Datei Zu beachten ist, dass der Ordnername `public` nicht Teil der URL ist. Die Datei
`./public/css/style.css` ist unter `http://example.com/css/style.css` zu finden. `./public/css/style.css` ist unter `http://example.com/css/style.css` zu finden.
Um den `Cache-Control`-Header mit Informationen zu versorgen, verwendet man Um den `Cache-Control`-Header mit Informationen zu versorgen, verwendet man
@ -426,7 +434,8 @@ get '/' do
end end
``` ```
Für alle Templates können auch generelle Einstellungen festgelegt werden: Für alle Templates können auch Einstellungen, die für alle Routen gelten,
festgelegt werden:
```ruby ```ruby
set :haml, :format => :html5 set :haml, :format => :html5
@ -443,7 +452,7 @@ Einstellungen:
<dl> <dl>
<dt>locals</dt> <dt>locals</dt>
<dd>Liste von lokalen Variablen, die and das Dokument weitergegeben werden. <dd>Liste von lokalen Variablen, die an das Dokument weitergegeben werden.
Praktisch für Partials: Praktisch für Partials:
<tt>erb "<%= foo %>", :locals => {:foo => "bar"}</tt></dd> <tt>erb "<%= foo %>", :locals => {:foo => "bar"}</tt></dd>
@ -453,7 +462,7 @@ Einstellungen:
auf <tt>settings.default_encoding</tt>.</dd> auf <tt>settings.default_encoding</tt>.</dd>
<dt>views</dt> <dt>views</dt>
<dd>Ordner, aus dem die Templates heraus geladen werden. Voreingestellt auf <dd>Ordner, aus dem die Templates geladen werden. Voreingestellt auf
<tt>settings.views</tt>.</dd> <tt>settings.views</tt>.</dd>
<dt>layout</dt> <dt>layout</dt>
@ -464,7 +473,7 @@ Einstellungen:
<tt>erb :index, :layout => !request.xhr?</tt></dd> <tt>erb :index, :layout => !request.xhr?</tt></dd>
<dt>content_type</dt> <dt>content_type</dt>
<dd>Content-Type den das Template ausgibt. Voreinstellung hängt von der <dd>Content-Typ den das Template ausgibt. Voreinstellung hängt von der
Templatesprache ab.</dd> Templatesprache ab.</dd>
<dt>scope</dt> <dt>scope</dt>
@ -478,6 +487,7 @@ Einstellungen:
den Renderer, der für das Template verwendet wird: den Renderer, der für das Template verwendet wird:
<tt>set :rdoc, :layout_engine => :erb</tt></dd> <tt>set :rdoc, :layout_engine => :erb</tt></dd>
<dt>layout_options</dt> <dt>layout_options</dt>
<dd>Besondere Einstellungen, die nur für das Rendering verwendet werden: <dd>Besondere Einstellungen, die nur für das Rendering verwendet werden:
@ -1045,8 +1055,8 @@ Templates eingesetzt.
### Templates mit `yield` und verschachtelte Layouts ### Templates mit `yield` und verschachtelte Layouts
Ein Layout ist üblicherweise ein Template, dass ein `yield` aufruft. Ein solches Ein Layout ist üblicherweise ein Template, das ein `yield` aufruft. Ein solches
Template kann entweder wie oben beschrieben über die `:template` option Template kann entweder wie oben beschrieben über die `:template` Option
verwendet werden oder mit einem Block gerendert werden: verwendet werden oder mit einem Block gerendert werden:
``` ruby ``` ruby
@ -1130,7 +1140,9 @@ verwendet. Durch `:layout => false` kann das Ausführen verhindert werden:
```ruby ```ruby
get '/' do get '/' do
haml :index, :layout => request.xhr? haml :index, :layout => !request.xhr?
# !request.xhr? prüft, ob es sich um einen asynchronen Request handelt.
# wenn nicht, dann verwende ein Layout (negiert durch !)
end end
``` ```
@ -1194,8 +1206,8 @@ after do
end end
``` ```
Filter können optional auch mit einem Muster ausgestattet werden, welches auf Filter können optional auch mit einem Muster ausgestattet werden, das auf den
den Request-Pfad passen muss, damit der Filter ausgeführt wird: Request-Pfad passen muss, damit der Filter ausgeführt wird:
```ruby ```ruby
before '/protected/*' do before '/protected/*' do
@ -1278,7 +1290,7 @@ wählen, damit sich alle Instanzen der Applikation dasselbe Session-Secret
teilen: teilen:
```ruby ```ruby
set :session_secret, 'super secret' set :session_secret, 'super_geheimes_Gegeimnis'
``` ```
Zur weiteren Konfiguration kann man einen Hash mit Optionen in den `sessions` Zur weiteren Konfiguration kann man einen Hash mit Optionen in den `sessions`
@ -1296,7 +1308,7 @@ Zum sofortigen Stoppen eines Request in einem Filter oder einer Route:
halt halt
``` ```
Der Status kann beim Stoppen auch angegeben werden: Der Status kann beim Stoppen mit angegeben werden:
```ruby ```ruby
halt 410 halt 410
@ -1347,8 +1359,9 @@ gefunden wird.
### Eine andere Route ansteuern ### Eine andere Route ansteuern
Manchmal entspricht `pass` nicht den Anforderungen, wenn das Ergebnis einer Wenn nicht zu einer anderen Route gesprungen werden soll, sondern nur das
anderen Route gefordert wird. Um das zu erreichen, lässt sich `call` nutzen: Ergebnis einer anderen Route gefordert wird, kann `call` für einen internen
Request verwendet werden:
```ruby ```ruby
get '/foo' do get '/foo' do
@ -1369,16 +1382,13 @@ Wenn der Request innerhalb derselben Applikations-Instanz aufgerufen und keine
Kopie der Instanz erzeugt werden soll, kann `call!` anstelle von `call` Kopie der Instanz erzeugt werden soll, kann `call!` anstelle von `call`
verwendet werden. verwendet werden.
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 Es ist möglich und empfohlen, den Status-Code sowie den Response-Body mit einem
einem Returnwert in der Route zu setzen. In manchen Situationen kann es jedoch Returnwert in der Route zu setzen. In manchen Situationen kann es jedoch sein,
sein, dass der Body an irgendeiner anderen Stelle während der Ausführung dass der Body an anderer Stelle während der Ausführung gesetzt werden soll.
gesetzt wird. Das lässt sich mit der Helfer-Methode `body` bewerkstelligen. Dafür kann man die Helfer-Methode `body` einsetzen. Ist sie gesetzt, kann sie zu
Wird `body` verwendet, lässt sich der Body jederzeit über diese Methode einem späteren Zeitpunkt aufgerufen werden:
aufrufen:
```ruby ```ruby
get '/foo' do get '/foo' do
@ -1430,7 +1440,7 @@ end
``` ```
Damit lassen sich Streaming-APIs realisieren, sog. Damit lassen sich Streaming-APIs realisieren, sog.
[Server Sent Events](http://dev.w3.org/html5/eventsource/) die als Basis für [Server Sent Events](http://dev.w3.org/html5/eventsource/), die als Basis für
[WebSockets](http://en.wikipedia.org/wiki/WebSocket) dienen. Ebenso können sie [WebSockets](http://en.wikipedia.org/wiki/WebSocket) dienen. Ebenso können sie
verwendet werden, um den Durchsatz zu erhöhen, wenn ein Teil der Daten von verwendet werden, um den Durchsatz zu erhöhen, wenn ein Teil der Daten von
langsamen Ressourcen abhängig ist. langsamen Ressourcen abhängig ist.
@ -1987,6 +1997,7 @@ Schutzmechanismen zu deaktivieren:
```ruby ```ruby
set :protection, :except => [:path_traversal, :session_hijacking] set :protection, :except => [:path_traversal, :session_hijacking]
``` ```
#### Mögliche Einstellungen #### Mögliche Einstellungen
<dl> <dl>
@ -2010,8 +2021,9 @@ set :protection, :except => [:path_traversal, :session_hijacking]
Inline-, View- und öffentliche Verzeichnis des Projekts festzustellen.</dd> Inline-, View- und öffentliche Verzeichnis des Projekts festzustellen.</dd>
<dt>bind</dt> <dt>bind</dt>
<dd>IP-Address, an die gebunden wird (Standardwert: <tt>0.0.0.0</tt>). Wird <dd>IP-Address, an die gebunden wird (Standardwert: <tt>0.0.0.0</tt>
nur für den eingebauten Server verwendet.</dd> <em>oder</em> <tt>localhost</tt>). Wird nur für den eingebauten Server
verwendet.</dd>
<dt>default_encoding</dt> <dt>default_encoding</dt>
<dd>Das Encoding, falls keines angegeben wurde. Standardwert ist <dd>Das Encoding, falls keines angegeben wurde. Standardwert ist
@ -2080,8 +2092,8 @@ set :protection, :except => [:path_traversal, :session_hijacking]
<dt>server</dt> <dt>server</dt>
<dd>Server oder Liste von Servern, die als eingebaute Server zur Verfügung <dd>Server oder Liste von Servern, die als eingebaute Server zur Verfügung
stehen. Standardmäßig auf <tt>[thin, mongrel, webrick]</tt> stehen. Die Reihenfolge gibt die Priorität vor, die Voreinstellung hängt von
voreingestellt. Die Anordnung gibt die Priorität vor.</dd> der verwendenten Ruby Implementierung ab.</dd>
<dt>sessions</dt> <dt>sessions</dt>
<dd>Sessions auf Cookiebasis mittels <dd>Sessions auf Cookiebasis mittels
@ -2134,7 +2146,7 @@ und `"test"` werden Templates automatisch gecached.
Um die Anwendung in einer anderen Umgebung auszuführen kann man die `-e` Um die Anwendung in einer anderen Umgebung auszuführen kann man die `-e`
Option verwenden: Option verwenden:
``` ```shell
ruby my_app.rb -e [ENVIRONMENT] ruby my_app.rb -e [ENVIRONMENT]
``` ```
@ -2187,7 +2199,7 @@ end
bekommt man dieses: bekommt man dieses:
``` ```shell
Au weia, etwas Schlimmes ist passiert Au weia, etwas Schlimmes ist passiert
``` ```
@ -2426,7 +2438,7 @@ end
Starte mit: Starte mit:
``` ```shell
ruby mein_app.rb ruby mein_app.rb
``` ```
@ -2441,7 +2453,7 @@ run MeineApp
Starte: Starte:
``` ```shell
rackup -p 4567 rackup -p 4567
``` ```
@ -2637,8 +2649,8 @@ end
Im Anfrage-Scope befindet man sich: Im Anfrage-Scope befindet man sich:
* In get/head/post/put/delete-Blöcken * In get, head, post, put, delete, options, patch, link und unlink Blöcken
* In before/after-Filtern * In before und after Filtern
* In Helfer-Methoden * In Helfer-Methoden
* In Templates * In Templates
@ -2668,7 +2680,7 @@ eingebunden](http://github.com/sinatra/sinatra/blob/master/lib/sinatra/main.rb
Sinatra-Anwendungen können direkt von der Kommandozeile aus gestartet werden: Sinatra-Anwendungen können direkt von der Kommandozeile aus gestartet werden:
``` ```shell
ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-h HOST] [-s HANDLER] ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-h HOST] [-s HANDLER]
``` ```
@ -2688,67 +2700,52 @@ Die Optionen sind:
Die folgenden Versionen werden offiziell unterstützt: Die folgenden Versionen werden offiziell unterstützt:
<dl> <dl>
<dt>Ruby 1.8.7</dt> <dt>Ruby 1.8.7</dt>
<dd>1.8.7 wird vollständig unterstützt, aber solange nichts dagegen spricht, <dd>1.8.7 wird vollständig unterstützt, ein Wechsel zu JRuby oder Rubinius wird
wird ein Update auf 1.9.2 oder ein Umstieg auf JRuby/Rubinius empfohlen. aber empfohlen. Ruby 1.8.7 wird noch bis Sinatra 2.0 unterstützt werden. Frühere
Unterstützung für 1.8.7 wird es mindestens bis Sinatra 2.0 und Ruby 2.0 Versionen von Ruby sind nicht kompatibel mit Sinatra.</dd>
geben, es sei denn, dass der unwahrscheinliche Fall eintritt und 1.8.8
rauskommt. Doch selbst dann ist es eher wahrscheinlich, dass 1.8.7 weiterhin
unterstützt wird. <b>Ruby 1.8.6 wird nicht mehr unterstützt.</b> Soll Sinatra
unter 1.8.6 eingesetzt werden, muss Sinatra 1.2 verwendet werden, dass noch
bis zum Release von Sinatra 1.4.0 fortgeführt wird.</dd>
<dt>Ruby 1.9.2</dt> <dt>Ruby 1.9.2</dt>
<dd>1.9.2 wird voll unterstützt und empfohlen. Version 1.9.2p0 sollte nicht <dd>1.9.2 wird mindestens bis Sinatra 1.5 voll unterstützt. Version 1.9.2p0
verwendet werden, da unter Sinatra immer wieder Segfaults auftreten. sollte nicht verwendet werden, da unter Sinatra immer wieder Segfaults
Unterstützung wird es mindestens bis zum Release von Ruby 1.9.4/2.0 geben und auftreten.</dd>
das letzte Sinatra Release für 1.9 wird so lange unterstützt, wie das Ruby
Core-Team 1.9 pflegt.</dd>
<dt>Ruby 1.9.3</dt> <dt>Ruby 1.9.3</dt>
<dd>1.9.3 wird vollständig unterstützt und empfohlen. Achtung, bei einem <dd>1.9.3 wird vollständig unterstützt und empfohlen. Achtung, bei einem
Wechsel zu 1.9.3 werden alle Sessions ungültig.</dd> Upgrade von einer früheren Version von Ruby zu Ruby 1.9.3 werden alle Sessions
ungültig. Ruby 1.9.3 wird bis Sinatra 2.0 unterstützt werden.</dd>
<dt>Rubinius</dt> <dt>Rubinius</dt>
<dd>Rubinius (rbx >= 1.2.4) wird offiziell unter Einbezug aller Templates <dd>Rubinius (Version >= 2.x) wird offiziell unterstützt. Es wird empfohlen, den
unterstützt. Die kommende 2.0 Version wird ebenfalls unterstützt, samt 1.9 <a href="http://puma.io">Puma Server</a> zu installieren (<tt>gem install puma
Modus.</dd> </tt>)</dd>
<dt>JRuby</dt> <dt>JRuby</dt>
<dd>JRuby wird offiziell unterstützt (JRuby >= 1.6.7). Probleme mit <dd>Aktuelle JRuby Versionen werden offiziell unterstützt. Es wird empfohlen,
Template- Bibliotheken Dritter sind nicht bekannt. Falls JRuby zum Einsatz keine C-Erweiterungen zu verwenden und als Server Trinidad zu verwenden
kommt, sollte aber darauf geachtet werden, dass ein JRuby-Rack-Handler zum (<tt>gem install trinidad</tt>).</dd>
Einsatz kommt die Thin und Mongrel Web-Server werden bisher nicht
unterstütz. JRubys Unterstützung für C-Erweiterungen sind zur Zeit ebenfalls
experimenteller Natur, betrifft im Moment aber nur die RDiscount, Redcarpet,
RedCloth und [[Yajl]] Templates.</dd>
</dl> </dl>
Weiterhin werden wir die kommende Ruby-Versionen im Auge behalten.
Die nachfolgend aufgeführten Ruby-Implementierungen werden offiziell nicht von Die nachfolgend aufgeführten Ruby-Implementierungen werden offiziell nicht von
Sinatra unterstützt, funktionieren aber normalerweise: Sinatra unterstützt, funktionieren aber normalerweise:
* Ruby Enterprise Edition * Ruby Enterprise Edition
* Ältere Versionen von JRuby und Rubinius * Ältere Versionen von JRuby und Rubinius
* MacRuby, Maglev, IronRuby * MacRuby (<tt>gem install control_tower</tt> wird empfohlen), Maglev, IronRuby
* Ruby 1.9.0 und 1.9.1 (wird jedoch nicht empfohlen, s.o.) * 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. Implementierung liegt.
Im Rahmen unserer CI (Kontinuierlichen Integration) wird bereits ruby-head Im Rahmen unserer CI (Kontinuierlichen Integration) wird bereits ruby-head
(das kommende Ruby 2.0.0) und 1.9.4 mit eingebunden. Da noch alles im Fluss (das kommende Ruby 2.1.0) mit eingebunden. Es kann davon ausgegangen
ist, kann zur Zeit für nichts garantiert werden. Es kann aber erwartet werden, werden, dass Sinatra Ruby 2.1.0 vollständig unterstützen wird.
dass Ruby 2.0.0p0 und 1.9.4p0 von Sinatra unterstützt werden wird.
Sinatra sollte auf jedem Betriebssystem laufen, dass den gewählten Ruby- Sinatra sollte auf jedem Betriebssystem laufen, dass einen funktionierenden
Interpreter unterstützt. Ruby-Interpreter aufweist.
Sinatra wird aktuell nicht unter Cardinal, SmallRuby, BleuRuby oder Sinatra läuft aktuell nicht unter Cardinal, SmallRuby, BlueRuby oder Ruby <= 1.8.7.
irgendeiner Version von Ruby vor 1.8.7 laufen.
## Der neuste Stand (The Bleeding Edge) ## Der neuste Stand (The Bleeding Edge)
@ -2756,7 +2753,7 @@ 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, Er sollte recht stabil sein. Ebenso gibt es von Zeit zu Zeit prerelease Gems,
die so installiert werden: die so installiert werden:
``` ```shell
gem install sinatra --pre gem install sinatra --pre
``` ```
@ -2768,7 +2765,7 @@ nachfolgenden Weg.
Soweit Bundler noch nicht installiert ist: Soweit Bundler noch nicht installiert ist:
``` ```shell
gem install bundler gem install bundler
``` ```
@ -2790,16 +2787,16 @@ Gemfile von Sinatra hinzugefügt.
Jetzt kannst du deine Applikation starten: Jetzt kannst du deine Applikation starten:
``` ```shell
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 `sinatra/lib`- Ordner angelegt werden. Gestartet wird in der Anwendung mit dem `sinatra/lib`-Ordner
im `LOAD_PATH`: im `LOAD_PATH`:
``` ```shell
cd myapp cd myapp
git clone git://github.com/sinatra/sinatra.git git clone git://github.com/sinatra/sinatra.git
ruby -Isinatra/lib myapp.rb ruby -Isinatra/lib myapp.rb
@ -2820,7 +2817,7 @@ end
Um Sinatra-Code von Zeit zu Zeit zu aktualisieren: Um Sinatra-Code von Zeit zu Zeit zu aktualisieren:
``` ```shell
cd myproject/sinatra cd myproject/sinatra
git pull git pull
``` ```
@ -2829,7 +2826,7 @@ git pull
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:
``` ```shell
git clone git://github.com/sinatra/sinatra.git git clone git://github.com/sinatra/sinatra.git
cd sinatra cd sinatra
rake sinatra.gemspec rake sinatra.gemspec
@ -2839,7 +2836,7 @@ rake install
Falls Gems als Root installiert werden sollen, sollte die letzte Zeile Falls Gems als Root installiert werden sollen, sollte die letzte Zeile
folgendermaßen lauten: folgendermaßen lauten:
``` ```shell
sudo rake install sudo rake install
``` ```
@ -2857,7 +2854,8 @@ SemVer und SemVerTag.
* [Issue-Tracker](http://github.com/sinatra/sinatra/issues) * [Issue-Tracker](http://github.com/sinatra/sinatra/issues)
* [Twitter](http://twitter.com/sinatra) * [Twitter](http://twitter.com/sinatra)
* [Mailing-Liste](http://groups.google.com/group/sinatrarb) * [Mailing-Liste](http://groups.google.com/group/sinatrarb)
* [ #sinatra](irc://chat.freenode.net/#sinatra) auf http://freenode.net * [#sinatra](irc://chat.freenode.net/#sinatra) auf http://freenode.net Es
gibt dort auch immer wieder deutschsprachige Entwickler, die gerne weiterhelfen.
* [Sinatra Book](http://sinatra-book.gittr.com) Kochbuch Tutorial * [Sinatra Book](http://sinatra-book.gittr.com) Kochbuch Tutorial
* [Sinatra Recipes](http://recipes.sinatrarb.com/) Sinatra-Rezepte aus der * [Sinatra Recipes](http://recipes.sinatrarb.com/) Sinatra-Rezepte aus der
Community Community