sinatra 1.1.2 → 1.1.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/AUTHORS +9 -0
- data/CHANGES +19 -0
- data/README.es.rdoc +204 -51
- data/README.rdoc +259 -54
- data/README.ru.rdoc +94 -28
- data/Rakefile +6 -14
- data/lib/sinatra/base.rb +17 -11
- data/sinatra.gemspec +4 -3
- data/test/helpers_test.rb +3 -0
- data/test/routing_test.rb +17 -5
- data/test/templates_test.rb +6 -0
- data/test/views/calc.html.erb +1 -0
- metadata +18 -9
data/AUTHORS
CHANGED
@@ -36,6 +36,15 @@ Sinatra would not be possible:
|
|
36
36
|
* Rick Olson (technoweenie) for the killer plug at RailsConf '08.
|
37
37
|
* Steven Garcia for the amazing custom artwork you see on 404's and 500's
|
38
38
|
* Pat Nakajima (nakajima) for fixing non-nested params in nested params Hash's.
|
39
|
+
* Konstantin Haase for his hard work and ongoing commitment to improving
|
40
|
+
Sinatra, for 1.1.0, 1.2.0 and beyond..
|
41
|
+
* Zachary Scott for adding Konstantin to the AUTHORS file. He also did help
|
42
|
+
writing the book, but mainly for adding Konstantin.
|
43
|
+
* Gabriel Andretta for having people wonder whether our documentation is
|
44
|
+
actually in English or in Spanish.
|
45
|
+
* Vasily Polovnyov, Nickolay Schwarz, Luciano Sousa, Wu Jiang, Mickael Riga,
|
46
|
+
Bernhard Essl, Janos Hardi, Kouhei Yanagita and "burningTyger" for willingly
|
47
|
+
translating whatever ends up in the README.
|
39
48
|
|
40
49
|
and last but not least:
|
41
50
|
|
data/CHANGES
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
= 1.1.3 / 2011-02-20
|
2
|
+
|
3
|
+
* Fixed issues with `user_agent` condition if the user agent header is missing.
|
4
|
+
(Konstantin Haase)
|
5
|
+
|
6
|
+
* Fix some routing tests that have been skipped by accident (Ross A. Baker)
|
7
|
+
|
8
|
+
* Fix rendering issues with Builder and Nokogiri (Konstantin Haase)
|
9
|
+
|
10
|
+
* Replace last_modified helper with better implementation. (cactus,
|
11
|
+
Konstantin Haase)
|
12
|
+
|
13
|
+
* Fix issue with charset not being set when using `provides` condition.
|
14
|
+
(Konstantin Haase)
|
15
|
+
|
16
|
+
* Fix issue with `render` not picking up all alternative file extensions for
|
17
|
+
a rendering engine - it was not possible to register ".html.erb" without
|
18
|
+
tricks. (Konstantin Haase)
|
19
|
+
|
1
20
|
= 1.1.2 / 2010-10-25
|
2
21
|
|
3
22
|
Like 1.1.1, but with proper CHANGES file.
|
data/README.es.rdoc
CHANGED
@@ -146,7 +146,7 @@ De esa manera podemos, por ejemplo, implementar fácilmente un streaming:
|
|
146
146
|
|
147
147
|
get('/') { Stream.new }
|
148
148
|
|
149
|
-
== Archivos
|
149
|
+
== Archivos Estáticos
|
150
150
|
|
151
151
|
Los archivos estáticos son servidos desde el directorio público
|
152
152
|
<tt>./public</tt>. Podés especificar una ubicación diferente ajustando la
|
@@ -173,7 +173,7 @@ les pase como argumento.
|
|
173
173
|
|
174
174
|
=== Plantillas Haml
|
175
175
|
|
176
|
-
La gem/librería haml es necesaria para para renderizar plantillas HAML:
|
176
|
+
La gem/librería <tt>haml</tt> es necesaria para para renderizar plantillas HAML:
|
177
177
|
|
178
178
|
## Vas a necesitar requerir haml en tu app
|
179
179
|
require 'haml'
|
@@ -206,9 +206,9 @@ y reemplazadas individualmente.
|
|
206
206
|
|
207
207
|
Renderiza <tt>./views/index.erb</tt>
|
208
208
|
|
209
|
-
=== Erubis
|
209
|
+
=== Plantillas Erubis
|
210
210
|
|
211
|
-
La gem/librería erubis es necesaria para renderizar plantillas
|
211
|
+
La gem/librería <tt>erubis</tt> es necesaria para renderizar plantillas Erubis:
|
212
212
|
|
213
213
|
## Vas a necesitar requerir erubis en tu app
|
214
214
|
require 'erubis'
|
@@ -217,11 +217,23 @@ La gem/librería erubis es necesaria para renderizar plantillas erubis:
|
|
217
217
|
erubis :index
|
218
218
|
end
|
219
219
|
|
220
|
-
Renderiza <tt>./views/index.erubis</tt
|
220
|
+
Renderiza <tt>./views/index.erubis</tt>.
|
221
|
+
|
222
|
+
También es posible reemplazar Erb con Erubis:
|
223
|
+
|
224
|
+
require 'erubis'
|
225
|
+
Tilt.register :erb, Tilt[:erubis]
|
226
|
+
|
227
|
+
get '/' do
|
228
|
+
erb :index
|
229
|
+
end
|
230
|
+
|
231
|
+
Renderiza <tt>./views/index.erb</tt> con Erubis.
|
221
232
|
|
222
233
|
=== Plantillas Builder
|
223
234
|
|
224
|
-
La gem/librería builder es necesaria para renderizar plantillas
|
235
|
+
La gem/librería <tt>builder</tt> es necesaria para renderizar plantillas
|
236
|
+
builder:
|
225
237
|
|
226
238
|
## Vas a necesitar requerir builder en tu app
|
227
239
|
require 'builder'
|
@@ -234,7 +246,8 @@ Renderiza <tt>./views/index.builder</tt>.
|
|
234
246
|
|
235
247
|
=== Plantillas Nokogiri
|
236
248
|
|
237
|
-
La gem/librería nokogiri es necesaria para renderizar plantillas
|
249
|
+
La gem/librería <tt>nokogiri</tt> es necesaria para renderizar plantillas
|
250
|
+
nokogiri:
|
238
251
|
|
239
252
|
## Vas a necesitar requerir nokogiri en tu app
|
240
253
|
require 'nokogiri'
|
@@ -247,7 +260,8 @@ Renderiza <tt>./views/index.nokogiri</tt>.
|
|
247
260
|
|
248
261
|
=== Plantillas Sass
|
249
262
|
|
250
|
-
La gem/librería haml es necesaria para renderizar
|
263
|
+
La gem/librería <tt>haml</tt> o <tt>sass</tt> es necesaria para renderizar
|
264
|
+
plantillas Sass:
|
251
265
|
|
252
266
|
## Vas a necesitar requerir haml o sass en tu app
|
253
267
|
require 'sass'
|
@@ -271,7 +285,8 @@ y reemplazadas individualmente.
|
|
271
285
|
|
272
286
|
=== Plantillas Scss
|
273
287
|
|
274
|
-
La gem/librería haml es necesaria para renderizar
|
288
|
+
La gem/librería <tt>haml</tt> o <tt>sass</tt>es necesaria para renderizar
|
289
|
+
plantillas Scss:
|
275
290
|
|
276
291
|
## Vas a necesitar requerir haml o sass en tu app
|
277
292
|
require 'sass'
|
@@ -295,7 +310,7 @@ y reemplazadas individualmente.
|
|
295
310
|
|
296
311
|
=== Plantillas Less
|
297
312
|
|
298
|
-
La gem/librería less es necesaria para renderizar plantillas Less:
|
313
|
+
La gem/librería <tt>less</tt> es necesaria para renderizar plantillas Less:
|
299
314
|
|
300
315
|
## Vas a necesitar requerir less en tu app
|
301
316
|
require 'less'
|
@@ -308,7 +323,7 @@ Renderiza <tt>./views/stylesheet.less</tt>.
|
|
308
323
|
|
309
324
|
=== Plantillas Liquid
|
310
325
|
|
311
|
-
La gem/librería liquid es necesaria para renderizar plantillas Liquid:
|
326
|
+
La gem/librería <tt>liquid</tt> es necesaria para renderizar plantillas Liquid:
|
312
327
|
|
313
328
|
## Vas a necesitar requerir liquid en tu app
|
314
329
|
require 'liquid'
|
@@ -326,7 +341,8 @@ plantilla Liquid, casi siempre vas a querer pasarle locales:
|
|
326
341
|
|
327
342
|
=== Plantillas Markdown
|
328
343
|
|
329
|
-
La gem/librería rdiscount es necesaria para renderizar plantillas
|
344
|
+
La gem/librería <tt>rdiscount</tt> es necesaria para renderizar plantillas
|
345
|
+
Markdown:
|
330
346
|
|
331
347
|
## Vas a necesitar requerir rdiscount en tu app
|
332
348
|
require "rdiscount"
|
@@ -343,15 +359,30 @@ generalmente vas a usarlo en combinación con otro motor de renderizado:
|
|
343
359
|
|
344
360
|
erb :resumen, :locals => { :texto => markdown(:introduccion) }
|
345
361
|
|
346
|
-
Tené en cuenta que también podés llamar al método markdown desde otras
|
362
|
+
Tené en cuenta que también podés llamar al método +markdown+ desde otras
|
347
363
|
plantillas:
|
348
364
|
|
349
365
|
%h1 Hola Desde Haml!
|
350
366
|
%p= markdown(:saludos)
|
351
367
|
|
352
|
-
|
368
|
+
También es posible parsear Markdown con BlueCloth en lugar de RDiscount:
|
369
|
+
|
370
|
+
require 'bluecloth'
|
371
|
+
|
372
|
+
Tilt.register 'markdown', BlueClothTemplate
|
373
|
+
Tilt.register 'mkd', BlueClothTemplate
|
374
|
+
Tilt.register 'md', BlueClothTemplate
|
375
|
+
|
376
|
+
get '/' do
|
377
|
+
markdown :index
|
378
|
+
end
|
353
379
|
|
354
|
-
|
380
|
+
Renderiza <tt>./views/index.md</tt> con BlueCloth.
|
381
|
+
|
382
|
+
=== Plantillas Textile
|
383
|
+
|
384
|
+
La gem/librería <tt>RedCloth</tt> es necesaria para renderizar plantillas
|
385
|
+
Textile:
|
355
386
|
|
356
387
|
## Vas a necesitar requerir redcloth en tu app
|
357
388
|
require "redcloth"
|
@@ -367,7 +398,7 @@ generalmente vas a usarlo en combinación con otro motor de renderizado:
|
|
367
398
|
|
368
399
|
erb :resumen, :locals => { :texto => textile(:introduccion) }
|
369
400
|
|
370
|
-
Tené en cuenta que también podés llamar al método textile desde otras
|
401
|
+
Tené en cuenta que también podés llamar al método +textile+ desde otras
|
371
402
|
plantillas:
|
372
403
|
|
373
404
|
%h1 Hola Desde Haml!
|
@@ -375,7 +406,7 @@ plantillas:
|
|
375
406
|
|
376
407
|
=== Plantillas RDoc
|
377
408
|
|
378
|
-
La gem/librería
|
409
|
+
La gem/librería <tt>rdoc</tt> es necesaria para renderizar plantillas RDoc:
|
379
410
|
|
380
411
|
## Vas a necesitar requerir rdoc en tu app
|
381
412
|
require "rdoc"
|
@@ -391,7 +422,7 @@ generalmente vas a usarlo en combinación con otro motor de renderizado:
|
|
391
422
|
|
392
423
|
erb :resumen, :locals => { :texto => rdoc(:introduccion) }
|
393
424
|
|
394
|
-
Tené en cuenta que también podés llamar al método rdoc desde otras
|
425
|
+
Tené en cuenta que también podés llamar al método +rdoc+ desde otras
|
395
426
|
plantillas:
|
396
427
|
|
397
428
|
%h1 Hola Desde Haml!
|
@@ -399,7 +430,7 @@ plantillas:
|
|
399
430
|
|
400
431
|
=== Plantillas Radius
|
401
432
|
|
402
|
-
La gem/librería radius es necesaria para renderizar plantillas Radius:
|
433
|
+
La gem/librería <tt>radius</tt> es necesaria para renderizar plantillas Radius:
|
403
434
|
|
404
435
|
## Vas a necesitar requerir radius en tu app
|
405
436
|
require 'radius'
|
@@ -417,7 +448,8 @@ plantilla Radius, casi siempre vas a querer pasarle locales:
|
|
417
448
|
|
418
449
|
=== Plantillas Markaby
|
419
450
|
|
420
|
-
La gem/librería markaby es necesaria para renderizar plantillas
|
451
|
+
La gem/librería <tt>markaby</tt> es necesaria para renderizar plantillas
|
452
|
+
Markaby:
|
421
453
|
|
422
454
|
## Vas a necesitar requerir markaby en tu app
|
423
455
|
require 'markaby'
|
@@ -430,8 +462,14 @@ Renderiza <tt>./views/index.mab</tt>.
|
|
430
462
|
|
431
463
|
=== Plantillas CoffeeScript
|
432
464
|
|
433
|
-
La gem/librería coffee-script y
|
434
|
-
|
465
|
+
La gem/librería <tt>coffee-script</tt> y al menos <b>una</b> de las siguientes
|
466
|
+
opciones para ejecutar JavaScript:
|
467
|
+
|
468
|
+
* +node+ (de Node.js) en tu path
|
469
|
+
* utilizar OSX
|
470
|
+
* la gem/librería +therubyracer+
|
471
|
+
|
472
|
+
son necesarios para renderizar plantillas CoffeeScript:
|
435
473
|
|
436
474
|
## Vas a necesitar requerir coffee-script en tu app
|
437
475
|
require 'coffee-script'
|
@@ -442,13 +480,13 @@ renderizar plantillas CoffeeScript:
|
|
442
480
|
|
443
481
|
Renderiza <tt>./views/application.coffee</tt>.
|
444
482
|
|
445
|
-
=== Plantillas
|
483
|
+
=== Plantillas Embebidas
|
446
484
|
|
447
485
|
get '/' do
|
448
486
|
haml '%div.titulo Hola Mundo'
|
449
487
|
end
|
450
488
|
|
451
|
-
Renderiza el template
|
489
|
+
Renderiza el template embebido en el string.
|
452
490
|
|
453
491
|
=== Accediendo a Variables en Plantillas
|
454
492
|
|
@@ -514,13 +552,39 @@ Las plantillas también pueden ser definidas usando el método top-level
|
|
514
552
|
end
|
515
553
|
|
516
554
|
Si existe una plantilla con el nombre "layout", va a ser usada cada vez que
|
517
|
-
una plantilla es renderizada. Podés desactivar los layouts
|
518
|
-
<tt>:layout => false</tt
|
555
|
+
una plantilla es renderizada. Podés desactivar los layouts individualmente
|
556
|
+
pasando <tt>:layout => false</tt> o globalmente con
|
557
|
+
<tt>set :haml, :layout => false</tt>.
|
519
558
|
|
520
559
|
get '/' do
|
521
560
|
haml :index, :layout => !request.xhr?
|
522
561
|
end
|
523
562
|
|
563
|
+
=== Asociando Extensiones de Archivo
|
564
|
+
|
565
|
+
Para asociar una extensión de archivo con un motor de renderizado, usá
|
566
|
+
<tt>Tilt.register</tt>. Por ejemplo, si querés usar la extensión +tt+ para
|
567
|
+
las plantillas Textile, podés hacer lo siguiente:
|
568
|
+
|
569
|
+
Tilt.register :tt, Tilt[:textile]
|
570
|
+
|
571
|
+
=== Agregando Tu Propio Motor de Renderizado
|
572
|
+
|
573
|
+
Primero, registrá tu motor con Tilt, y después, creá tu método de renderizado:
|
574
|
+
|
575
|
+
Tilt.register :mipg, MiMotorParaPlantillaGenial
|
576
|
+
|
577
|
+
helpers do
|
578
|
+
def mypg(*args) render(:mypg, *args) end
|
579
|
+
end
|
580
|
+
|
581
|
+
get '/' do
|
582
|
+
mypg :index
|
583
|
+
end
|
584
|
+
|
585
|
+
Renderiza <tt>./views/index.mypg</tt>. Mirá https://github.com/rtomayko/tilt
|
586
|
+
para aprender más de Tilt.
|
587
|
+
|
524
588
|
== Ayudantes
|
525
589
|
|
526
590
|
Usá el método top-level <tt>helpers</tt> para definir métodos ayudantes que
|
@@ -683,7 +747,7 @@ Ejecutar cuando el entorno es <tt>:production</tt> o <tt>:test</tt>:
|
|
683
747
|
...
|
684
748
|
end
|
685
749
|
|
686
|
-
== Manejo de
|
750
|
+
== Manejo de Errores
|
687
751
|
|
688
752
|
Los manejadores de errores se ejecutan dentro del mismo contexto que las rutas
|
689
753
|
y los filtros before, lo que significa que podés usar, por ejemplo,
|
@@ -849,13 +913,6 @@ etc.). Ahí es donde Sinatra::Base entra en el juego:
|
|
849
913
|
end
|
850
914
|
end
|
851
915
|
|
852
|
-
La clase MiApp es un componente Rack independiente que puede actuar como Rack
|
853
|
-
middleware, una aplicación Rack, o Rails metal. Podés usar (con +use+) o
|
854
|
-
ejecutar (con +run+) esta clase desde un archivo rackup +config.ru+; o,
|
855
|
-
controlar un componente de servidor provisto como una librería:
|
856
|
-
|
857
|
-
MiApp.run! :host => 'localhost', :port => 9090
|
858
|
-
|
859
916
|
Las subclases de Sinatra::Base tienen disponibles exactamente los mismos
|
860
917
|
métodos que los provistos por el DSL de top-level. La mayoría de las
|
861
918
|
aplicaciones top-level se pueden convertir en componentes Sinatra::Base con
|
@@ -872,6 +929,64 @@ desactivadas por defecto, incluyendo el servidor incorporado. Mirá
|
|
872
929
|
{Opciones y Configuraciones}[http://sinatra.github.com/configuration.html]
|
873
930
|
para detalles sobre las opciones disponibles y su comportamiento.
|
874
931
|
|
932
|
+
=== Sirviendo una Aplicación Modular
|
933
|
+
|
934
|
+
Las dos opciones más comunes para iniciar una aplicación modular son, iniciarla
|
935
|
+
activamente con <tt>run!</tt>:
|
936
|
+
|
937
|
+
# mi_app.rb
|
938
|
+
require 'sinatra/base'
|
939
|
+
|
940
|
+
class MiApp < Sinatra::Base
|
941
|
+
# ... código de la app ...
|
942
|
+
|
943
|
+
# iniciar el servidor si el archivo fue ejecutado directamente
|
944
|
+
run! if app_file == $0
|
945
|
+
end
|
946
|
+
|
947
|
+
Iniciar con:
|
948
|
+
|
949
|
+
ruby mi_app.rb
|
950
|
+
|
951
|
+
O, con un archivo <tt>config.ru</tt>, que permite usar cualquier handler Rack:
|
952
|
+
|
953
|
+
# config.ru
|
954
|
+
require 'mi_app'
|
955
|
+
run MiApp
|
956
|
+
|
957
|
+
Después ejecutar:
|
958
|
+
|
959
|
+
rackup -p 4567
|
960
|
+
|
961
|
+
=== Usando una Aplicación Clásica con un Archivo config.ru
|
962
|
+
|
963
|
+
Escribí el archivo de tu aplicación:
|
964
|
+
|
965
|
+
# app.rb
|
966
|
+
require 'sinatra'
|
967
|
+
|
968
|
+
get '/' do
|
969
|
+
'Hola mundo!'
|
970
|
+
end
|
971
|
+
|
972
|
+
Y el <tt>config.ru</tt> correspondiente:
|
973
|
+
|
974
|
+
require 'app'
|
975
|
+
run Sinatra::Application
|
976
|
+
|
977
|
+
=== ¿Cuándo Usar config.ru?
|
978
|
+
|
979
|
+
Indicadores de que probablemente querés usar <tt>config.ru</tt>:
|
980
|
+
|
981
|
+
* Querés realizar el deploy con un hanlder Rack distinto (Passenger, Unicorn,
|
982
|
+
Heroku, ...).
|
983
|
+
* Querés usar más de una subclase de <tt>Sinatra::Base</tt>.
|
984
|
+
* Querés usar Sinatra únicamente para middleware, pero no como un endpoint.
|
985
|
+
|
986
|
+
<b>No hay necesidad de utilizar un archivo <tt>config.ru</tt> exclusivamente
|
987
|
+
porque tenés una aplicación modular, y no necesitás una aplicación modular para
|
988
|
+
iniciarla con <tt>config.ru</tt>.</b>
|
989
|
+
|
875
990
|
=== Utilizando Sinatra como Middleware
|
876
991
|
|
877
992
|
Sinatra no solo es capaz de usar otro Rack middleware, sino que a su vez,
|
@@ -994,7 +1109,7 @@ Pegale una mirada al código: acá está el
|
|
994
1109
|
{Sinatra::Delegator mixin}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/base.rb#L1128]
|
995
1110
|
que es {incluido en el espacio de nombres principal}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/main.rb#L28].
|
996
1111
|
|
997
|
-
== Línea de
|
1112
|
+
== Línea de Comandos
|
998
1113
|
|
999
1114
|
Las aplicaciones Sinatra pueden ser ejecutadas directamente:
|
1000
1115
|
|
@@ -1009,33 +1124,71 @@ Las opciones son:
|
|
1009
1124
|
-s # especifica el servidor/manejador rack (thin es usado por defecto)
|
1010
1125
|
-x # activa el mutex lock (está desactivado por defecto)
|
1011
1126
|
|
1012
|
-
== A la
|
1127
|
+
== A la Vanguardia
|
1128
|
+
|
1129
|
+
Si querés usar el código de Sinatra más reciente, sentite libre de ejecutar
|
1130
|
+
tu aplicación sobre la rama master, en general es bastante estable.
|
1131
|
+
|
1132
|
+
También liberamos prereleases de vez en cuando, así, podés hacer
|
1133
|
+
|
1134
|
+
gem install sinatra --pre
|
1135
|
+
|
1136
|
+
Para obtener algunas de las últimas características.
|
1013
1137
|
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1138
|
+
=== Con Bundler
|
1139
|
+
|
1140
|
+
Esta es la manera recomendada para ejecutar tu aplicación sobre la última
|
1141
|
+
versión de Sinatra usando {Bundler}[http://gembundler.com/].
|
1142
|
+
|
1143
|
+
Primero, instalá bundler si no lo hiciste todavía:
|
1144
|
+
|
1145
|
+
gem install bundler
|
1146
|
+
|
1147
|
+
Después, en el directorio de tu proyecto, creá un archivo +Gemfile+:
|
1148
|
+
|
1149
|
+
source :rubygems
|
1150
|
+
gem 'sinatra', :git => "git://github.com/sinatra/sinatra.git"
|
1151
|
+
|
1152
|
+
# otras dependencias
|
1153
|
+
gem 'haml' # por ejemplo, si usás haml
|
1154
|
+
gem 'activerecord', '~> 3.0' # quizás también necesités ActiveRecord 3.x
|
1155
|
+
|
1156
|
+
Tené en cuenta que tenés que listar todas las dependencias directas de tu
|
1157
|
+
aplicación. No es necesario listar las dependencias de Sinatra (Rack y Tilt)
|
1158
|
+
porque Bundler las agrega directamente.
|
1159
|
+
|
1160
|
+
Ahora podés arrancar tu aplicación así:
|
1161
|
+
|
1162
|
+
bundle exec ruby miapp.rb
|
1163
|
+
|
1164
|
+
=== Con Git
|
1165
|
+
|
1166
|
+
Cloná el repositorio localmente y ejecutá tu aplicación, asegurándote que el
|
1167
|
+
directorio <tt>sinatra/lib</tt> esté en el <tt>LOAD_PATH</tt>:
|
1017
1168
|
|
1018
1169
|
cd miapp
|
1019
1170
|
git clone git://github.com/sinatra/sinatra.git
|
1020
1171
|
ruby -Isinatra/lib miapp.rb
|
1021
1172
|
|
1022
|
-
|
1023
|
-
<tt>LOAD_PATH</tt> dentro de tu aplicación:
|
1173
|
+
Para actualizar el código fuente de Sinatra en el futuro:
|
1024
1174
|
|
1025
|
-
|
1026
|
-
|
1027
|
-
require 'sinatra'
|
1175
|
+
cd miapp/sinatra
|
1176
|
+
git pull
|
1028
1177
|
|
1029
|
-
|
1030
|
-
"Estoy usando la versión " + Sinatra::VERSION
|
1031
|
-
end
|
1178
|
+
=== Instalación Global
|
1032
1179
|
|
1033
|
-
|
1180
|
+
Podés construir la gem vos mismo:
|
1034
1181
|
|
1035
|
-
|
1036
|
-
|
1182
|
+
git clone git://github.com/sinatra/sinatra.git
|
1183
|
+
cd sinatra
|
1184
|
+
rake sinatra.gemspec
|
1185
|
+
rake install
|
1186
|
+
|
1187
|
+
Si instalás tus gems como root, el último paso debería ser
|
1188
|
+
|
1189
|
+
sudo rake install
|
1037
1190
|
|
1038
|
-
==
|
1191
|
+
== Lecturas Recomendadas
|
1039
1192
|
|
1040
1193
|
* {Sito web del proyecto}[http://www.sinatrarb.com/] - Documentación
|
1041
1194
|
adicional, noticias, y enlaces a otros recursos.
|