sinatra 1.3.0.e → 1.3.0.f
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/.travis.yml +16 -0
- data/CHANGES +77 -18
- data/Gemfile +43 -26
- data/README.de.rdoc +264 -88
- data/README.es.rdoc +241 -80
- data/README.fr.rdoc +206 -81
- data/README.hu.rdoc +2 -2
- data/README.jp.rdoc +2 -2
- data/README.pt-br.rdoc +2 -2
- data/README.pt-pt.rdoc +2 -2
- data/README.rdoc +169 -23
- data/README.ru.rdoc +373 -433
- data/README.zh.rdoc +5 -5
- data/Rakefile +8 -2
- data/lib/sinatra/base.rb +191 -46
- data/lib/sinatra/main.rb +1 -1
- data/lib/sinatra/showexceptions.rb +2 -2
- data/lib/sinatra/version.rb +1 -1
- data/sinatra.gemspec +7 -5
- data/test/contest.rb +62 -28
- data/test/filter_test.rb +2 -2
- data/test/helpers_test.rb +185 -12
- data/test/mapped_error_test.rb +25 -6
- data/test/nokogiri_test.rb +5 -6
- data/test/response_test.rb +10 -1
- data/test/result_test.rb +2 -2
- data/test/routing_test.rb +13 -0
- data/test/server_test.rb +3 -2
- data/test/settings_test.rb +98 -11
- data/test/slim_test.rb +15 -25
- data/test/static_test.rb +3 -3
- data/test/streaming_test.rb +100 -0
- metadata +82 -35
data/README.es.rdoc
CHANGED
@@ -100,6 +100,17 @@ O con un parámetro de bloque:
|
|
100
100
|
"Hola, #{c}!"
|
101
101
|
end
|
102
102
|
|
103
|
+
Los patrones de ruta pueden contener parámetros opcionales:
|
104
|
+
|
105
|
+
get '/posts.?:formato?' do
|
106
|
+
# coincide con "GET /posts" y además admite cualquier extensión, por
|
107
|
+
# ejemplo, "GET /posts.json", "GET /posts.xml", etc.
|
108
|
+
end
|
109
|
+
|
110
|
+
A propósito, a menos que desactivés la protección para el ataque <em>path
|
111
|
+
traversal</em> (ver más abajo), el path de la petición puede ser modificado
|
112
|
+
antes de que se compare con los de tus rutas.
|
113
|
+
|
103
114
|
=== Condiciones
|
104
115
|
|
105
116
|
Las rutas pueden incluir una variedad de condiciones de selección, como por
|
@@ -139,6 +150,26 @@ Podés definir tus propias condiciones fácilmente:
|
|
139
150
|
"Lo siento, perdiste."
|
140
151
|
end
|
141
152
|
|
153
|
+
Si tu condición acepta más de un argumento, podés pasarle un arreglo. Al
|
154
|
+
definir la condición puede resultarte conveniente utilizar el operador splat en
|
155
|
+
la lista de parámetros:
|
156
|
+
|
157
|
+
set(:autorizar) do |*roles| # <- mirá el splat
|
158
|
+
condition do
|
159
|
+
unless sesion_iniciada? && roles.any? {|rol| usuario_actual.tiene_rol? rol }
|
160
|
+
redirect "/iniciar_sesion/", 303
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
get "/mi/cuenta/", :autorizar => [:usuario, :administrador] do
|
166
|
+
"Detalles de mi cuenta"
|
167
|
+
end
|
168
|
+
|
169
|
+
get "/solo/administradores/", :autorizar => :administrador do
|
170
|
+
"Únicamente para administradores!"
|
171
|
+
end
|
172
|
+
|
142
173
|
=== Valores de Retorno
|
143
174
|
|
144
175
|
El valor de retorno de un bloque de ruta determina al menos el cuerpo de la
|
@@ -209,14 +240,17 @@ O, usando un lookahead negativo:
|
|
209
240
|
|
210
241
|
Los archivos estáticos son servidos desde el directorio público
|
211
242
|
<tt>./public</tt>. Podés especificar una ubicación diferente ajustando la
|
212
|
-
opción <tt>:
|
243
|
+
opción <tt>:public_folder</tt>:
|
213
244
|
|
214
|
-
set :
|
245
|
+
set :public_folder, File.dirname(__FILE__) + '/estaticos'
|
215
246
|
|
216
247
|
Notá que el nombre del directorio público no está incluido en la URL. Por
|
217
248
|
ejemplo, el archivo <tt>./public/css/style.css</tt> se accede a través de
|
218
249
|
<tt>http://ejemplo.com/css/style.css</tt>.
|
219
250
|
|
251
|
+
Usá la configuración <tt>:static_cache_control</tt> para agregar el encabezado
|
252
|
+
<tt>Cache-Control</tt> (ver la sección de configuración para más detalles).
|
253
|
+
|
220
254
|
== Vistas / Plantillas
|
221
255
|
|
222
256
|
Cada lenguaje de plantilla se expone a través de un método de renderizado que
|
@@ -428,7 +462,7 @@ layout distinto al de la plantilla pasando la opción <tt>:layout_engine</tt>.
|
|
428
462
|
|
429
463
|
Dependencias:: {rdoc}[http://rdoc.rubyforge.org/]
|
430
464
|
Extensiones de Archivo:: <tt>.rdoc</tt>
|
431
|
-
Ejemplo:: <tt>
|
465
|
+
Ejemplo:: <tt>rdoc :LEEME, :layout_engine => :erb</tt>
|
432
466
|
|
433
467
|
No es posible llamar métodos desde rdoc, ni pasarle locales. Por lo tanto,
|
434
468
|
generalmente vas a usarlo en combinación con otro motor de renderizado:
|
@@ -804,7 +838,7 @@ De manera similar, también podés asignar el código de estado y encabezados:
|
|
804
838
|
get '/foo' do
|
805
839
|
status 418
|
806
840
|
headers \
|
807
|
-
"Allow" => "BREW, POST, GET, PROPFIND, WHEN"
|
841
|
+
"Allow" => "BREW, POST, GET, PROPFIND, WHEN",
|
808
842
|
"Refresh" => "Refresh: 20; http://www.ietf.org/rfc/rfc2324.txt"
|
809
843
|
body "I'm a tea pot!"
|
810
844
|
end
|
@@ -812,6 +846,56 @@ De manera similar, también podés asignar el código de estado y encabezados:
|
|
812
846
|
También, al igual que +body+, tanto +status+ como +headers+ pueden utilizarse
|
813
847
|
para obtener sus valores cuando no se les pasa argumentos.
|
814
848
|
|
849
|
+
=== Streaming De Respuestas
|
850
|
+
|
851
|
+
A veces vas a querer empezar a enviar la respuesta a pesar de que todavía no
|
852
|
+
terminaste de generar su cuerpo. También es posible que, en algunos casos,
|
853
|
+
quieras seguir enviando información hasta que el cliente cierre la conexión.
|
854
|
+
Cuando esto ocurra, el +stream+ helper te va a ser de gran ayuda:
|
855
|
+
|
856
|
+
get '/' do
|
857
|
+
stream do |out|
|
858
|
+
out << "Esto va a ser legen -\n"
|
859
|
+
sleep 0.5
|
860
|
+
out << " (esperalo) \n"
|
861
|
+
sleep 1
|
862
|
+
out << "- dario!\n"
|
863
|
+
end
|
864
|
+
end
|
865
|
+
|
866
|
+
Podés implementar APIs de streaming,
|
867
|
+
{Server-Sent Events}[http://dev.w3.org/html5/eventsource/] y puede ser usado
|
868
|
+
como base para {WebSockets}[http://es.wikipedia.org/wiki/WebSockets]. También
|
869
|
+
puede ser usado para incrementar el throughput si solo una parte del contenido
|
870
|
+
depende de un recurso lento.
|
871
|
+
|
872
|
+
Hay que tener en cuenta que el comportamiento del streaming, especialmente el
|
873
|
+
número de peticiones concurrentes, depende del servidor web utilizado para
|
874
|
+
servir la aplicación. Puede que algunos servidores, como es el caso de
|
875
|
+
WEBRick, no soporten streaming directamente, así el cuerpo de la respuesta será
|
876
|
+
enviado completamente de una vez cuando el bloque pasado a +stream+ finalice su
|
877
|
+
ejecución.
|
878
|
+
|
879
|
+
Cuando se pasa +keep_open+ como parámetro, no se va a enviar el mensaje
|
880
|
+
+close+ al objeto de stream. Queda en vos cerrarlo en el punto de ejecución
|
881
|
+
que quieras. Nuevamente, hay que tener en cuenta que este comportamiento es
|
882
|
+
posible solo en servidores que soporten eventos, como Thin o Rainbows. El
|
883
|
+
resto de los servidores van a cerrar el stream de todos modos:
|
884
|
+
|
885
|
+
set :server, :thin
|
886
|
+
conexiones = []
|
887
|
+
|
888
|
+
get '/' do
|
889
|
+
# mantenemos abierto el stream
|
890
|
+
stream(:keep_open) { |salida| conexiones << salida }
|
891
|
+
end
|
892
|
+
|
893
|
+
post '/' do
|
894
|
+
# escribimos a todos los streams abiertos
|
895
|
+
conexiones.each { |salida| salida << params[:mensaje] << "\n" }
|
896
|
+
"mensaje enviado"
|
897
|
+
end
|
898
|
+
|
815
899
|
=== Log (Registro)
|
816
900
|
|
817
901
|
En el ámbito de la petición, el helper +logger+ (registrador) expone
|
@@ -898,7 +982,7 @@ búsqueda:
|
|
898
982
|
|
899
983
|
O usar una sesión:
|
900
984
|
|
901
|
-
enable :
|
985
|
+
enable :sessions
|
902
986
|
|
903
987
|
get '/foo' do
|
904
988
|
session[:secreto] = 'foo'
|
@@ -934,7 +1018,7 @@ Si estás usando el helper +expires+ para definir el encabezado correspondiente,
|
|
934
1018
|
expires 500, :public, :must_revalidate
|
935
1019
|
end
|
936
1020
|
|
937
|
-
Para usar cachés adecuadamente, deberías considerar usar +etag+
|
1021
|
+
Para usar cachés adecuadamente, deberías considerar usar +etag+ o
|
938
1022
|
+last_modified+. Es recomendable que llames a estos helpers *antes* de hacer
|
939
1023
|
cualquier trabajo pesado, ya que van a enviar la respuesta inmediatamente si
|
940
1024
|
el cliente ya tiene la versión actual en su caché:
|
@@ -953,7 +1037,8 @@ También es posible usar una
|
|
953
1037
|
|
954
1038
|
Estos helpers no van a cachear nada por vos, sino que van a facilitar la
|
955
1039
|
información necesaria para poder hacerlo. Si estás buscando soluciones rápidas
|
956
|
-
de cacheo, mirá
|
1040
|
+
de cacheo con proxys inversos, mirá
|
1041
|
+
{rack-cache}[http://rtomayko.github.com/rack-cache/]:
|
957
1042
|
|
958
1043
|
require "rack/cache"
|
959
1044
|
require "sinatra"
|
@@ -966,6 +1051,10 @@ de cacheo, mirá {rack-cache}[http://rtomayko.github.com/rack-cache/]:
|
|
966
1051
|
"hola"
|
967
1052
|
end
|
968
1053
|
|
1054
|
+
Usá la configuración <tt>:static_cache_control</tt> para agregar el encabezado
|
1055
|
+
<tt>Cache-Control</tt> a archivos estáticos (ver la sección de configuración
|
1056
|
+
para más detalles).
|
1057
|
+
|
969
1058
|
=== Enviando Archivos
|
970
1059
|
|
971
1060
|
Para enviar archivos, podés usar el método <tt>send_file</tt>:
|
@@ -1073,6 +1162,38 @@ También podés pasarle un nombre de archivo:
|
|
1073
1162
|
"guardalo!"
|
1074
1163
|
end
|
1075
1164
|
|
1165
|
+
=== Fecha y Hora
|
1166
|
+
|
1167
|
+
Sinatra pone a tu disposición el helper +time_for+, que genera un objeto +Time+
|
1168
|
+
a partir del valor que recibe como argumento. Este valor puede ser un
|
1169
|
+
+String+, pero también es capaz de convertir objetos +DateTime+, +Date+ y de
|
1170
|
+
otras clases similares:
|
1171
|
+
|
1172
|
+
get '/' do
|
1173
|
+
pass if Time.now > time_for('Dec 23, 2012')
|
1174
|
+
"todavía hay tiempo"
|
1175
|
+
end
|
1176
|
+
|
1177
|
+
Este método es usado internamente por métodos como +expires+ y +last_modified+,
|
1178
|
+
entre otros. Por lo tanto, es posible extender el comportamiento de estos
|
1179
|
+
métodos sobreescribiendo +time_for+ en tu aplicación:
|
1180
|
+
|
1181
|
+
helpers do
|
1182
|
+
def time_for(value)
|
1183
|
+
case value
|
1184
|
+
when :ayer then Time.now - 24*60*60
|
1185
|
+
when :mañana then Time.now + 24*60*60
|
1186
|
+
else super
|
1187
|
+
end
|
1188
|
+
end
|
1189
|
+
end
|
1190
|
+
|
1191
|
+
get '/' do
|
1192
|
+
last_modified :ayer
|
1193
|
+
expires :mañana
|
1194
|
+
"hola"
|
1195
|
+
end
|
1196
|
+
|
1076
1197
|
=== Buscando los Archivos de las Plantillas
|
1077
1198
|
|
1078
1199
|
El helper <tt>find_template</tt> se utiliza para encontrar los archivos de las
|
@@ -1162,99 +1283,131 @@ Podés acceder a estas opciones utilizando el método <tt>settings</tt>:
|
|
1162
1283
|
...
|
1163
1284
|
end
|
1164
1285
|
|
1286
|
+
==== Configurando la Protección de Ataques
|
1287
|
+
|
1288
|
+
Sinatra usa {Rack::Protection}[https://github.com/rkh/rack-protection#readme]
|
1289
|
+
para defender a tu aplicación de los ataques más comunes. Tenés que tener en
|
1290
|
+
cuenta que como consecuencia de esto puede venir asociada una disminución del
|
1291
|
+
rendimiento de tu aplicación. Si por este, o algún otro motivo, querés
|
1292
|
+
desactivar está funcionalidad, podés hacerlo:
|
1293
|
+
|
1294
|
+
disable :protection
|
1295
|
+
|
1296
|
+
También es posible desactivar una única capa de defensa:
|
1297
|
+
|
1298
|
+
set :protection, :except => :path_traversal
|
1299
|
+
|
1300
|
+
O varias:
|
1301
|
+
|
1302
|
+
set :protections, :except => [:path_traversal, :session_hijacking]
|
1303
|
+
|
1165
1304
|
=== Configuraciones Disponibles
|
1166
1305
|
|
1167
|
-
[absolute_redirects]
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1306
|
+
[absolute_redirects] si está deshabilitada, Sinatra va a permitir
|
1307
|
+
redirecciones relativas, sin embargo, como consecuencia
|
1308
|
+
de esto, va a dejar de cumplir con el RFC 2616 (HTTP
|
1309
|
+
1.1), que solamente permite redirecciones absolutas.
|
1310
|
+
|
1311
|
+
Activalo si tu apliación está corriendo atrás de un proxy
|
1312
|
+
inverso que no se ha configurado adecuadamente. Notá que
|
1313
|
+
el helper +url+ va a seguir produciendo URLs absolutas, a
|
1314
|
+
menos que le pasés +false+ como segundo parámetro.
|
1315
|
+
|
1316
|
+
Deshabilitada por defecto.
|
1171
1317
|
|
1172
|
-
|
1173
|
-
|
1174
|
-
el helper +url+ va a seguir produciendo URLs absolutas, a
|
1175
|
-
menos que le pasés +false+ como segundo parámetro.
|
1318
|
+
[add_charsets] tipos mime a los que el helper <tt>content_type</tt> les
|
1319
|
+
añade automáticamente el charset.
|
1176
1320
|
|
1177
|
-
|
1321
|
+
En general, no deberías asignar directamente esta opción,
|
1322
|
+
sino añadirle los charsets que quieras:
|
1178
1323
|
|
1179
|
-
|
1180
|
-
añade automáticamente el charset.
|
1324
|
+
settings.add_charsets << "application/foobar"
|
1181
1325
|
|
1182
|
-
|
1183
|
-
|
1326
|
+
[app_file] archivo principal de la aplicación, se utiliza para
|
1327
|
+
detectar la raíz del proyecto, el directorio de las
|
1328
|
+
vistas y el público así como las plantillas inline.
|
1184
1329
|
|
1185
|
-
|
1330
|
+
[bind] dirección IP que utilizará el servidor integrado (por
|
1331
|
+
defecto: 0.0.0.0).
|
1186
1332
|
|
1187
|
-
[
|
1188
|
-
|
1189
|
-
y el público así como las plantillas inline.
|
1333
|
+
[default_encoding] encoding utilizado cuando el mismo se desconoce (por
|
1334
|
+
defecto <tt>"utf-8"</tt>).
|
1190
1335
|
|
1191
|
-
[
|
1192
|
-
defecto: 0.0.0.0).
|
1336
|
+
[dump_errors] mostrar errores en el log.
|
1193
1337
|
|
1194
|
-
[
|
1195
|
-
|
1338
|
+
[environment] entorno actual, por defecto toma el valor de
|
1339
|
+
<tt>ENV['RACK_ENV']</tt>, o <tt>"development"</tt> si no
|
1340
|
+
está disponible.
|
1196
1341
|
|
1197
|
-
[
|
1342
|
+
[logging] define si se utiliza el logger.
|
1198
1343
|
|
1199
|
-
[
|
1200
|
-
|
1201
|
-
está disponible.
|
1344
|
+
[lock] coloca un lock alrededor de cada petición, procesando
|
1345
|
+
solamente una por proceso.
|
1202
1346
|
|
1203
|
-
|
1347
|
+
Habilitá esta opción si tu aplicación no es thread-safe.
|
1348
|
+
Se encuentra deshabilitada por defecto.
|
1204
1349
|
|
1205
|
-
[
|
1206
|
-
|
1350
|
+
[method_override] utiliza el parámetro <tt>_method</tt> para permtir
|
1351
|
+
formularios put/delete en navegadores que no los
|
1352
|
+
soportan.
|
1207
1353
|
|
1208
|
-
|
1209
|
-
Se encuentra deshabilitada por defecto.
|
1354
|
+
[port] puerto en el que escuchará el servidor integrado.
|
1210
1355
|
|
1211
|
-
[
|
1212
|
-
|
1356
|
+
[prefixed_redirects] define si inserta <tt>request.script_name</tt> en las
|
1357
|
+
redirecciones cuando no se proporciona un path absoluto.
|
1358
|
+
De esta manera, cuando está habilitada,
|
1359
|
+
<tt>redirect '/foo'</tt> se comporta de la misma manera
|
1360
|
+
que <tt>redirect to('/foo')</tt>. Se encuentra
|
1361
|
+
deshabilitada por defecto.
|
1213
1362
|
|
1214
|
-
[
|
1363
|
+
[protection] define si deben activarse las protecciones para los
|
1364
|
+
ataques web más comunes. Para más detalles mirá la
|
1365
|
+
sección sobre la configuración de protección de ataques
|
1366
|
+
más arriba.
|
1215
1367
|
|
1216
|
-
[
|
1217
|
-
redirecciones cuando no se proporciona un path absoluto.
|
1218
|
-
De esta manera, cuando está habilitada,
|
1219
|
-
<tt>redirect '/foo'</tt> se comporta de la misma manera
|
1220
|
-
que <tt>redirect to('/foo')</tt>. Se encuentra
|
1221
|
-
deshabilitada por defecto.
|
1368
|
+
[public_folder] directorio desde donde se sirven los archivos públicos.
|
1222
1369
|
|
1223
|
-
[
|
1370
|
+
[reload_templates] define si se recargan las plantillas entre peticiones.
|
1224
1371
|
|
1225
|
-
|
1372
|
+
Se encuentra activado en el entorno de desarrollo.
|
1226
1373
|
|
1227
|
-
|
1374
|
+
[root] directorio raíz del proyecto.
|
1228
1375
|
|
1229
|
-
[
|
1376
|
+
[raise_errors] elevar excepciones (detiene la aplicación).
|
1230
1377
|
|
1231
|
-
[
|
1378
|
+
[run] cuando está habilitada, Sinatra se va a encargar de
|
1379
|
+
iniciar el servidor web, no la habilités cuando estés
|
1380
|
+
usando rackup o algún otro medio.
|
1232
1381
|
|
1233
|
-
[
|
1234
|
-
|
1235
|
-
usando rackup o algún otro medio.
|
1382
|
+
[running] indica si el servidor integrado está ejecutandose, ¡no
|
1383
|
+
cambiés esta configuración!.
|
1236
1384
|
|
1237
|
-
[
|
1238
|
-
|
1385
|
+
[server] servidor, o lista de servidores, para usar como servidor
|
1386
|
+
integrado. Por defecto: ['thin', 'mongrel', 'webrick'],
|
1387
|
+
el orden establece la prioridad.
|
1239
1388
|
|
1240
|
-
[
|
1241
|
-
integrado. Por defecto: ['thin', 'mongrel', 'webrick'],
|
1242
|
-
el orden establece la prioridad.
|
1389
|
+
[sessions] habilita sesiones basadas en cookies.
|
1243
1390
|
|
1244
|
-
[
|
1391
|
+
[show_exceptions] muestra un stack trace en el navegador.
|
1245
1392
|
|
1246
|
-
[
|
1393
|
+
[static] define si Sinatra debe encargarse de servir archivos
|
1394
|
+
estáticos.
|
1247
1395
|
|
1248
|
-
|
1249
|
-
|
1396
|
+
Deshabilitala cuando usés un servidor capaz de
|
1397
|
+
hacerlo por sí solo, porque mejorará el
|
1398
|
+
rendimiento. Se encuentra habilitada por
|
1399
|
+
defecto en el estilo clásico y desactivado en el
|
1400
|
+
el modular.
|
1250
1401
|
|
1251
|
-
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1402
|
+
[static_cache_control] cuando Sinatra está sirviendo archivos estáticos, y
|
1403
|
+
está opción está habilitada, les va a agregar encabezados
|
1404
|
+
<tt>Cache-Control</tt> a las respuestas. Para esto
|
1405
|
+
utiliza el helper +cache_control+. Se encuentra
|
1406
|
+
deshabilitada por defecto. Notar que es necesario
|
1407
|
+
utilizar un array cuando se asignan múltiples valores:
|
1408
|
+
<tt>set :static_cache_control, [:public, :max_age => 300]</tt>.
|
1256
1409
|
|
1257
|
-
[views]
|
1410
|
+
[views] directorio de las vistas.
|
1258
1411
|
|
1259
1412
|
== Manejo de Errores
|
1260
1413
|
|
@@ -1565,6 +1718,7 @@ esto tenés <tt>Sinatra.new</tt>:
|
|
1565
1718
|
Acepta como argumento opcional una aplicación desde la que se
|
1566
1719
|
heredará:
|
1567
1720
|
|
1721
|
+
# config.ru
|
1568
1722
|
require 'sinatra/base'
|
1569
1723
|
|
1570
1724
|
controller = Sinatra.new do
|
@@ -1701,7 +1855,14 @@ Las siguientes versiones de Ruby son soportadas oficialmente:
|
|
1701
1855
|
|
1702
1856
|
[ Ruby 1.8.7 ]
|
1703
1857
|
1.8.7 es soportado completamente. Sin embargo, si no hay nada que te lo
|
1704
|
-
prohíba, te recomendamos que usés 1.9.2 o cambies a JRuby o Rubinius.
|
1858
|
+
prohíba, te recomendamos que usés 1.9.2 o cambies a JRuby o Rubinius. No se
|
1859
|
+
dejará de dar soporte a 1.8.7 hasta Sinatra 2.0 y Ruby 2.0, aunque si se
|
1860
|
+
libera la versión 1.8.8 de Ruby las cosas podrían llegar a cambiar. Sin
|
1861
|
+
embargo, que eso ocurra es muy poco probable, e incluso el caso de que lo
|
1862
|
+
haga, puede que se siga dando soporte a 1.8.7. <b>Hemos dejado de soportar
|
1863
|
+
Ruby 1.8.6.</b> Si querés ejecutar Sinatra sobre 1.8.6, podés utilizar la
|
1864
|
+
versión 1.2, pero tené en cuenta que una vez que Sinatra 1.4.0 sea liberado,
|
1865
|
+
ya no se corregirán errores por más que se reciban reportes de los mismos.
|
1705
1866
|
|
1706
1867
|
[ Ruby 1.9.2 ]
|
1707
1868
|
1.9.2 es soportado y recomendado. Tené en cuenta que Radius y Markaby no
|
@@ -1709,11 +1870,11 @@ Las siguientes versiones de Ruby son soportadas oficialmente:
|
|
1709
1870
|
fallos de segmentación cuando se ejecuta Sinatra.
|
1710
1871
|
|
1711
1872
|
[ Rubinius ]
|
1712
|
-
Rubinius es soportado oficialmente (Rubinius >= 1.2.
|
1873
|
+
Rubinius es soportado oficialmente (Rubinius >= 1.2.4). Todo
|
1713
1874
|
funciona correctamente, incluyendo los lenguajes de plantillas.
|
1714
1875
|
|
1715
1876
|
[ JRuby ]
|
1716
|
-
JRuby es soportado oficialmente (JRuby >= 1.6.
|
1877
|
+
JRuby es soportado oficialmente (JRuby >= 1.6.3). No se conocen
|
1717
1878
|
problemas con librerías de plantillas de terceras partes. Sin
|
1718
1879
|
embargo, si elegís usar JRuby, deberías examinar sus Rack handlers
|
1719
1880
|
porque el servidor web Thin no es soportado completamente. El
|
@@ -1721,32 +1882,31 @@ Las siguientes versiones de Ruby son soportadas oficialmente:
|
|
1721
1882
|
experimental, sin embargo, de momento solamente RDiscount y Redcarpted
|
1722
1883
|
se ven afectadas.
|
1723
1884
|
|
1724
|
-
<b>Hemos dejado de soportar Ruby 1.8.6.</b> Si querés ejecutar Sinatra sobre
|
1725
|
-
1.8.6, podés utilizar la versión 1.2, pero tené en cuenta que una vez que
|
1726
|
-
Sinatra 1.4.0 sea liberado, ya no se corregirán los reportes de errores que se
|
1727
|
-
reciban.
|
1728
|
-
|
1729
1885
|
Siempre le prestamos atención a las nuevas versiones de Ruby.
|
1730
1886
|
|
1731
1887
|
Las siguientes implementaciones de Ruby no se encuentran soportadas
|
1732
1888
|
oficialmente. De cualquier manera, pueden ejecutar Sinatra:
|
1733
1889
|
|
1734
1890
|
* Versiones anteriores de JRuby y Rubinius
|
1891
|
+
* Ruby Enterprise Edition
|
1735
1892
|
* MacRuby, Maglev e IronRuby
|
1736
|
-
* Ruby 1.9.0 y 1.9.1
|
1893
|
+
* Ruby 1.9.0 y 1.9.1 (pero no te recomendamos que los usés)
|
1737
1894
|
|
1738
1895
|
No estar soportada oficialmente, significa que si las cosas solamente se rompen
|
1739
1896
|
ahí y no en una plataforma soportada, asumimos que no es nuestro problema sino
|
1740
1897
|
el suyo.
|
1741
1898
|
|
1742
1899
|
Nuestro servidor CI también se ejecuta sobre ruby-head (que será la
|
1743
|
-
próxima versión 1.9.
|
1744
|
-
garantizar nada. De todas formas, podés contar con que 1.9.
|
1900
|
+
próxima versión 1.9.4). Como está en movimiento constante, no podemos
|
1901
|
+
garantizar nada. De todas formas, podés contar con que 1.9.4-p0 sea
|
1745
1902
|
soportada.
|
1746
1903
|
|
1747
1904
|
Sinatra debería funcionar en cualquier sistema operativo soportado por la
|
1748
1905
|
implementación de Ruby elegida.
|
1749
1906
|
|
1907
|
+
En este momento, no vas a poder ejecutar Sinatra en Cardinal, SmallRuby,
|
1908
|
+
BlueRuby o cualquier versión de Ruby anterior a 1.8.7.
|
1909
|
+
|
1750
1910
|
== A la Vanguardia
|
1751
1911
|
|
1752
1912
|
Si querés usar el código de Sinatra más reciente, sentite libre de ejecutar
|
@@ -1833,3 +1993,4 @@ siguiendo las especificaciones SemVer y SemVerTag.
|
|
1833
1993
|
{última versión liberada}[http://rubydoc.info/gems/sinatra] o para la
|
1834
1994
|
{rama de desarrollo actual}[http://rubydoc.info/github/sinatra/sinatra]
|
1835
1995
|
en http://rubydoc.info/
|
1996
|
+
* {Servidor de IC}[http://ci.rkh.im/view/Sinatra/]
|