Drop support for Stylus (#1697)

This commit is contained in:
Eloy Pérez 2021-10-04 01:59:45 +02:00 committed by Jordan Owens
parent 44ce685218
commit 9dede30f5d
14 changed files with 79 additions and 553 deletions

View File

@ -54,7 +54,6 @@ if RUBY_ENGINE == "ruby"
gem 'radius'
gem 'asciidoctor'
gem 'liquid'
gem 'stylus'
gem 'rabl'
gem 'builder'
gem 'erubi'

View File

@ -69,7 +69,6 @@ diesen Server verwenden.
- [Creole Templates](#creole-templates)
- [MediaWiki Templates](#mediawiki-templates)
- [CoffeeScript Templates](#coffeescript-templates)
- [Stylus Templates](#stylus-templates)
- [Yajl Templates](#yajl-templates)
- [WLang Templates](#wlang-templates)
+ [Auf Variablen in Templates zugreifen](#auf-variablen-in-templates-zugreifen)
@ -1052,43 +1051,6 @@ Layout, indem die `:layout_engine`-Option verwendet wird.
</tr>
</table>
#### Stylus Templates
<table>
<tr>
<td>Abhängigkeit</td>
<td>
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
Stylus
</a> und eine Möglichkeit
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
JavaScript auszuführen
</a>.
</td>
</tr>
<tr>
<td>Dateierweiterung</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td>Beispiel</td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
Um Stylus-Templates ausführen zu können, müssen `stylus` und `stylus/tilt`
zuerst geladen werden:
```ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :example
end
```
#### Yajl Templates
<table>

View File

@ -67,7 +67,6 @@ Se recomienda ejecutar `gem install puma`, porque Sinatra lo utilizará si está
* [Plantillas Creole](#plantillas-creole)
* [Plantillas MediaWiki](#mediawiki-templates)
* [Plantillas CofeeScript](#plantillas-coffeescript)
* [Plantillas Stylus](#plantillas-stylus)
* [Plantillas Yajl](#plantillas-yajl)
* [Plantillas Wlang](#plantillas-wlang)
* [Accediendo Variables en Plantillas](#accediendo-a-variables-en-plantillas)
@ -549,7 +548,7 @@ Opciones disponibles:
del motor usado para renderizar la plantilla.
Ejemplo: <tt>set :rdoc, :layout_engine => :erb</tt>
</dd>
<dt>layout_options</dt>
<dd>
Opciones especiales usadas únicamente para renderizar el layout. Ejemplo:
@ -578,7 +577,7 @@ get '/' do
end
```
Renderiza el string de la plantilla. Opcionalmente puedes especificar
Renderiza el string de la plantilla. Opcionalmente puedes especificar
`:path` y `:line` para un backtrace más claro si hay una ruta del sistema
de archivos o una línea asociada con ese string
@ -1048,42 +1047,6 @@ De todas maneras, es posible usar otro motor de renderizado para esa plantilla p
</tr>
</table>
#### Plantillas Stylus
<table>
<tr>
<td>Dependencias</td>
<td>
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
Stylus
</a> y un
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
mecanismo para ejecutar javascript
</a>
</td>
</tr>
<tr>
<td>Extensiones de Archivo</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td>Ejemplo</td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
Antes de poder usar las plantillas de Stylus, necesitas cargar `stylus` y `stylus/tilt`:
```ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :example
end
```
#### Plantillas Yajl
<table>
@ -1419,7 +1382,7 @@ end
#### Secreto de Sesión
Para mejorar la seguridad, los datos de la sesión en la cookie se firman con un secreto usando `HMAC-SHA1`. El secreto de esta sesión debería ser de manera óptima
un valor aleatorio criptográficamente seguro de una longitud adecuada para
un valor aleatorio criptográficamente seguro de una longitud adecuada para
`HMAC-SHA1` que es mayor o igual que 64 bytes (512 bits, 128 hex caracteres).
Se le aconsejará que no use un secreto que sea inferior a 32
bytes de aleatoriedad (256 bits, 64 caracteres hexadecimales).
@ -1428,11 +1391,11 @@ sino que use un generador de números aleatorios para crearlo.
Los humanos somos extremadamente malos generando valores aleatorios
De forma predeterminada, un secreto de sesión aleatorio seguro de 32 bytes se genera para usted por
Sinatra, pero cambiará con cada reinicio de su aplicación. Si tienes varias
Sinatra, pero cambiará con cada reinicio de su aplicación. Si tienes varias
instancias de tu aplicación y dejas que Sinatra genere la clave, cada instancia
tendría una clave de sesión diferente y probablemente no es lo que quieres.
Para una mejor seguridad y usabilidad es
Para una mejor seguridad y usabilidad es
[recomendado](https://12factor.net/config) que genere un secreto de sesión
aleatorio seguro y se guarde en las variables de entorno en cada host que ejecuta
su aplicación para que todas las instancias de su aplicación compartan el mismo
@ -1869,7 +1832,7 @@ get '/bar' do
end
```
### Control del Cache
### Control del Cache
Asignar tus encabezados correctamente es el cimiento para realizar un cacheo
HTTP correcto.
@ -1985,7 +1948,7 @@ Estas opciones son:
<dl>
<dt>filename</dt>
<dd>Nombre del archivo devuelto, por defecto es el nombre real del archivo.</dd>
<dt>last_modified</dt>
<dd>Valor para el encabezado Last-Modified, por defecto toma el mtime del archivo.</dd>
@ -2333,13 +2296,13 @@ set :protection, :except => [:path_traversal, :session_hijacking]
formularios put/delete en navegadores que no los
soportan.
</dd>
<dt>mustermann_opts</dt>
<dd>
Un hash predeterminado de opciones para pasar a Mustermann.new
al compilar las rutas.
</dd>
<dt>port</dt>
<dd>
Puerto en el que escuchará el servidor integrado.
@ -2357,7 +2320,7 @@ set :protection, :except => [:path_traversal, :session_hijacking]
<dt>protection</dt>
<dd>
Define si se habilitan o no las protecciones de ataques web.
Define si se habilitan o no las protecciones de ataques web.
Ver la sección de protección encima.
</dd>
@ -2369,7 +2332,7 @@ set :protection, :except => [:path_traversal, :session_hijacking]
está presente, se infiere del valor de la opción
<tt>app_file</tt>.
</dd>
<dt>quiet</dt>
<dd>
Inhabilita los logs generados por los comandos de inicio y detención de Sinatra.
@ -2416,7 +2379,7 @@ set :protection, :except => [:path_traversal, :session_hijacking]
integrado. El orden indica su prioridad, por defecto depende
de la implementación de Ruby.
</dd>
<dt>server_settings</dt>
<dd>
Si está utilizando un servidor web WEBrick, presumiblemente para su entorno de desarrollo, puede pasar un hash de opciones a <tt> server_settings </tt>, como <tt> SSLEnable </tt> o <tt> SSLVerifyClient </tt>. Sin embargo, los servidores web como Puma no son compatibles, por lo que puede establecer <tt> server_settings </tt> definiéndolo como un método cuando llame a <tt> configure </tt>.
@ -2428,7 +2391,7 @@ set :protection, :except => [:path_traversal, :session_hijacking]
través de <tt>Rack::Session::Cookie</tt>. Ver la
sección 'Usando Sesiones' para más información.
</dd>
<dt>session_store</dt>
<dd>
Define el middleware de sesión Rack utilizado. Predeterminado a
@ -2468,7 +2431,7 @@ información.
utilizar un array cuando se asignan múltiples valores:
<tt>set :static_cache_control, [:public, :max_age => 300]</tt>.
</dd>
<dt>threaded</dt>
<dd>
Si se establece en <tt> true </tt>, le dirá al servidor que use
@ -3120,7 +3083,7 @@ Las siguientes versiones de Ruby son soportadas oficialmente:
<dt>Rubinius</dt>
<dd>
Rubinius es oficialmente compatible (Rubinius> = 2.x). Se recomienda instalar la gema puma
Rubinius es oficialmente compatible (Rubinius> = 2.x). Se recomienda instalar la gema puma
<tt>gem install puma</tt>.
</dd>
@ -3132,7 +3095,7 @@ Las siguientes versiones de Ruby son soportadas oficialmente:
</dd>
</dl>
Las versiones de Ruby anteriores a 2.2.2 ya no son compatibles con Sinatra 2.0 .
Las versiones de Ruby anteriores a 2.2.2 ya no son compatibles con Sinatra 2.0 .
Siempre le prestamos atención a las nuevas versiones de Ruby.

View File

@ -67,7 +67,6 @@ Sinatra utilise le server Thin quand il est disponible.
* [Templates Creole](#templates-creole)
* [Templates MediaWiki](#templates-mediawiki)
* [Templates CoffeeScript](#templates-coffeescript)
* [Templates Stylus](#templates-stylus)
* [Templates Yajl](#templates-yajl)
* [Templates WLang](#templates-wlang)
* [Accéder aux variables dans un Template](#accéder-aux-variables-dans-un-template)
@ -1059,44 +1058,6 @@ pour le layout en utilisant loption `:layout_engine`.
</tr>
</table>
#### Templates Stylus
<table>
<tr>
<td>Dépendances</td>
<td>
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
Stylus
</a>
et un
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
moyen d'exécuter javascript
</a>
</td>
</tr>
<tr>
<td>Extensions de fichier</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td>Exemple</td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
Avant de pouvoir utiliser des templates Stylus, vous devez auparavant charger
`stylus` et `stylus/tilt` :
```ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :exemple
end
```
#### Templates Yajl
<table>

View File

@ -64,7 +64,6 @@ PumaがあればSinatraはこれを利用するので、`gem install puma`する
* [Creole テンプレート](#creole-テンプレート)
* [MediaWiki テンプレート](#mediawiki-テンプレート)
* [CoffeeScript テンプレート](#coffeescript-テンプレート)
* [Stylus テンプレート](#stylus-テンプレート)
* [Yajl テンプレート](#yajl-テンプレート)
* [WLang テンプレート](#wlang-テンプレート)
* [テンプレート内での変数へのアクセス](#テンプレート内での変数へのアクセス)
@ -958,42 +957,6 @@ erb :overview, :locals => { :text => mediawiki(:introduction) }
</tr>
</table>
#### Stylus テンプレート
<table>
<tr>
<td>依存</td>
<td>
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
Stylus
</a> および
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
JavaScriptの起動方法
</a>
</td>
</tr>
<tr>
<td>ファイル拡張子</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td></td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
Stylusテンプレートを使えるようにする前に、まず`stylus`と`stylus/tilt`を読み込む必要があります。
```ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :example
end
```
#### Yajl テンプレート
<table>

View File

@ -62,7 +62,6 @@ thin이 설치되어 있을 경우 Sinatra는 thin을 통해 실행합니다.
* [Creole 템플릿](#creole-템플릿)
* [MediaWiki 템플릿](#mediawiki-템플릿)
* [CoffeeScript 템플릿](#coffeescript-템플릿)
* [Stylus 템플릿](#stylus-템플릿)
* [Yajl 템플릿](#yajl-템플릿)
* [WLang 템플릿](#wlang-템플릿)
* [템플릿에서 변수에 접근하기](#템플릿에서-변수에-접근하기)
@ -967,43 +966,6 @@ MediaWiki에서 루비를 호출할 수 없기 때문에, MediaWiki으로 작성
</tr>
</table>
#### Stylus 템플릿
<table>
<tr>
<td>의존성</td>
<td>
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
Stylus
</a>
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
자바스크립트 실행법
</a>
</td>
</tr>
<tr>
<td>파일 확장자</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td>예제</td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
Stylus 템플릿을 사용가능하게 하려면, 먼저 `stylus``stylus/tilt`를 로드
해야합니다.
```ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :example
end
```
#### Yajl 템플릿
<table>

View File

@ -66,7 +66,6 @@ View at: [http://localhost:4567](http://localhost:4567)
* [Creole ടെംപ്ലേറ്റ്സ്](#creole-templates)
* [MediaWiki ടെംപ്ലേറ്റ്സ്](#mediawiki-templates)
* [CoffeeScript ടെംപ്ലേറ്റ്സ്](#coffeescript-templates)
* [Stylus ടെംപ്ലേറ്റ്സ്](#stylus-templates)
* [Yajl ടെംപ്ലേറ്റ്സ്](#yajl-templates)
* [WLang ടെംപ്ലേറ്റ്സ്](#wlang-templates)
* [വാരിയബിൾസിനെ എടുക്കാൻ സഹായിക്കുന്ന ടെംപ്ലേറ്റ്സ്](#accessing-variables-in-templates)
@ -193,7 +192,7 @@ get '/hello/:name' do |n|
"Hello #{n}!"
end
```
റൂട്ട് പാട്ടേഴ്സിൽ പേരുള്ള splat ഉണ്ടാകാറുണ്ട് അതിനെ 'params['splat']' array ഉപയോഗിച്ച ഉപയോഗപ്പെടുത്താവുന്നത് ആണ്
റൂട്ട് പാട്ടേഴ്സിൽ പേരുള്ള splat ഉണ്ടാകാറുണ്ട് അതിനെ 'params['splat']' array ഉപയോഗിച്ച ഉപയോഗപ്പെടുത്താവുന്നത് ആണ്
@ -293,7 +292,7 @@ get '/', :provides => ['rss', 'atom', 'xml'] do
builder :feed
end
```
`provides ` ആക്‌സെപ്റ് ഹെൽഡർസ് നെ അന്വഷിക്കുന്നു
`provides ` ആക്‌സെപ്റ് ഹെൽഡർസ് നെ അന്വഷിക്കുന്നു
നിങ്ങളുടെ കണ്ടിഷൻസ് ഇനി എളുപ്പത്തിൽ ഉണ്ടാക്കാൻ സഹായിക്കുന്നു
```ruby
@ -1015,43 +1014,6 @@ template than for the layout by passing the `:layout_engine` option.
</tr>
</table>
#### Stylus Templates
<table>
<tr>
<td>Dependency</td>
<td>
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
Stylus
</a> and a
<a href="https://github.com/sstephenson/execjs" title="ExecJS">
way to execute javascript
</a>
</td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
Before being able to use Stylus templates, you need to load `stylus` and
`stylus/tilt` first:
```ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :example
end
```
#### Yajl Templates
<table>

View File

@ -68,7 +68,6 @@ pick up if available.
* [Creole Templates](#creole-templates)
* [MediaWiki Templates](#mediawiki-templates)
* [CoffeeScript Templates](#coffeescript-templates)
* [Stylus Templates](#stylus-templates)
* [Yajl Templates](#yajl-templates)
* [WLang Templates](#wlang-templates)
* [Accessing Variables in Templates](#accessing-variables-in-templates)
@ -1044,43 +1043,6 @@ template than for the layout by passing the `:layout_engine` option.
</tr>
</table>
#### Stylus Templates
<table>
<tr>
<td>Dependency</td>
<td>
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
Stylus
</a> and a
<a href="https://github.com/sstephenson/execjs" title="ExecJS">
way to execute javascript
</a>
</td>
</tr>
<tr>
<td>File Extension</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td>Example</td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
Before being able to use Stylus templates, you need to load `stylus` and
`stylus/tilt` first:
```ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :example
end
```
#### Yajl Templates
<table>

View File

@ -76,7 +76,6 @@ disponível, o Sinatra irá utilizá-la.
* [Creole Templates](#creole-templates)
* [MediaWiki Templates](#mediawiki-templates)
* [CoffeeScript Templates](#coffeescript-templates)
* [Stylus Templates](#stylus-templates)
* [Yajl Templates](#yajl-templates)
* [WLang Templates](#wlang-templates)
* [Acessando Variáveis nos Templates](#acessando-variáveis-nos-templates)
@ -1084,43 +1083,6 @@ deve-se passar a `:layout_engine` como opção.
</tr>
</table>
#### Stylus Templates
<table>
<tr>
<td>Dependência</td>
<td>
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
Stylus
</a> and a
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
way to execute javascript
</a>
</td>
</tr>
<tr>
<td>Extensão do Arquivo</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td>Exemplo</td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
Antes que você possa utilizar o template Stylus primeiro você deve carregar
`stylus` e `stylus/tilt`:
```ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :exemplo
end
```
#### Yajl Templates
<table>

View File

@ -70,7 +70,6 @@ ruby myapp.rb
* [Creole шаблоны](#creole-шаблоны)
* [MediaWiki шаблоны](#mediawiki-шаблоны)
* [CoffeeScript шаблоны](#coffeescript-шаблоны)
* [Stylus шаблоны](#stylus-шаблоны)
* [Yajl шаблоны](#yajl-шаблоны)
* [WLang шаблоны](#wlang-шаблоны)
* [Доступ к переменным в шаблонах](#Доступ-к-переменным-в-шаблонах)
@ -261,7 +260,7 @@ end
```
**Имеейте ввиду**: если вы не отключите защиту от обратного пути в директориях
(_path traversal_, см. ниже), путь запроса может быть изменён до начала
(_path traversal_, см. ниже), путь запроса может быть изменён до начала
поиска подходящего маршрута.
Вы можете настроить Mustermann опции, используемые для данного маршрута, путём передачи в `:mustermann_opts` хэш:
@ -1051,43 +1050,6 @@ erb :overview, :locals => { :text => mediawiki(:introduction) }
</tr>
</table>
#### Stylus шаблоны
<table>
<tr>
<td>Зависимости</td>
<td>
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
Stylus
</a> и
<a href="https://github.com/sstephenson/execjs" title="ExecJS">
способ запускать JavaScript
</a>
</td>
</tr>
<tr>
<td>Расширение файла</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td>Пример</td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
Перед тем, как использовать шаблоны Stylus, необходимо сперва подключить
`stylus` и `stylus/tilt`:
```ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :example
end
```
#### Yajl шаблоны
<table>
@ -1296,7 +1258,7 @@ end
### Использование пользовательской логики для поиска шаблона
Для того, чтобы реализовать собственный механизм поиска шаблона,
Для того, чтобы реализовать собственный механизм поиска шаблона,
необходимо написать метод `#find_template`:
```ruby
@ -1371,7 +1333,7 @@ end
## Методы-помощники
Используйте высокоуровневый метод `helpers` для того, чтобы определить
Используйте высокоуровневый метод `helpers` для того, чтобы определить
методы-помощники, которые могут быть использованы в обработчиках маршрутов
и шаблонах:
@ -1424,27 +1386,27 @@ end
Для того, чтобы повысить безопасность, данные сессии в файле 'cookie'
подписываются ключом сессии с использованием `HMAC-SHA1`. Этот ключ сессии
должен быть оптимальным криптографическим 'secure random' значением соответствующей
длины, которая для `HMAC-SHA1` больше или равна 64 байтам (512 бит, 128
должен быть оптимальным криптографическим 'secure random' значением соответствующей
длины, которая для `HMAC-SHA1` больше или равна 64 байтам (512 бит, 128
шестнадцатеричных символов). Не рекомендуется использовать ключ, длина
которого менее 32 байт (256 бит, 64 шестнадцатеричных символа). Поэтому
**очень важно**, чтобы вы не просто составили значение ключа, а использовали
которого менее 32 байт (256 бит, 64 шестнадцатеричных символа). Поэтому
**очень важно**, чтобы вы не просто составили значение ключа, а использовали
безопасный генератор случайных чисел для его создания. Люди очень плохо
придумывают случайные значения.
По умолчанию, Sinatra создаёт для вас безопасный случайный ключ сессии из
32 байт, однако он будет меняться при каждом перезапуске приложения. Если у
вас есть несколько экземпляров вашего приложения, и вы доверили Sinatra
генерацию ключа, то каждый экземпляр будет иметь отличный ключ сессии,
вас есть несколько экземпляров вашего приложения, и вы доверили Sinatra
генерацию ключа, то каждый экземпляр будет иметь отличный ключ сессии,
что, вероятно, не совсем то, что вам необходимо.
Для лучшей безопасности и удобства использования
[рекомендуется](https://12factor.net/config) генерировать случайный безопасный
ключ и хранить его в переменной среды на каждом хосте, на котором запущено
приложение, чтобы все экземпляры вашего приложения использовали один и тот
же ключ. Вы должны периодически менять значение ключа сессии на новое.
[рекомендуется](https://12factor.net/config) генерировать случайный безопасный
ключ и хранить его в переменной среды на каждом хосте, на котором запущено
приложение, чтобы все экземпляры вашего приложения использовали один и тот
же ключ. Вы должны периодически менять значение ключа сессии на новое.
Вот несколько примеров того, как вы можете создать 64-байтный ключ
и установить его:
и установить его:
**Генерация ключа сессии**
@ -1456,13 +1418,13 @@ $ ruby -e "require 'securerandom'; puts SecureRandom.hex(64)"
**Генерация ключа сессии (бонусные пункты)**
Используйте [гем 'sysrandom'](https://github.com/cryptosphere/sysrandom#readme).
Предпочтительнее использовать системные средства RNG для генерации случайных
Предпочтительнее использовать системные средства RNG для генерации случайных
значений вместо пространства пользователя `OpenSSL`, который в настоящее время
по умолчанию используется в MRI Ruby:
```text
$ gem install sysrandom
Создание собственных расширений. Это может занять некоторое время...
Создание собственных расширений. Это может занять некоторое время...
Успешно установлен sysrandom-1.x
1 gem установлен
@ -1472,10 +1434,10 @@ $ ruby -e "require 'sysrandom/securerandom'; puts SecureRandom.hex(64)"
**Переменная среды для ключа сессии**
Задайте переменной среды `SESSION_SECRET` значение, которое вы
Задайте переменной среды `SESSION_SECRET` значение, которое вы
сгенерировали. Данная переменная автоматически будет использована Sinatra.
Сделайте это значение постоянным при перезагрузке вашего
сервера. Поскольку метод для генерации будет различным в разных системах,
Сделайте это значение постоянным при перезагрузке вашего
сервера. Поскольку метод для генерации будет различным в разных системах,
то код ниже приведён только в качестве примера:
```bash
@ -1488,7 +1450,7 @@ $ ruby -e "require 'sysrandom/securerandom'; puts SecureRandom.hex(64)"
чтобы оно генерировало случайный безопасный ключ тогда, когда переменная
среды `SESSION_SECRET` не доступна.
В качестве бонусных пунктов здесь тоже используйте
В качестве бонусных пунктов здесь тоже используйте
[гем 'sysrandom'gem](https://github.com/cryptosphere/sysrandom):
```ruby
@ -1534,10 +1496,10 @@ set :session_store, Rack::Session::Pool
```
Вы также можете **не вызывать** `enable :sessions`, а вместо этого использовать
необходимую вам Rack прослойку так же, как вы это обычно делаете.
необходимую вам Rack прослойку так же, как вы это обычно делаете.
Очень важно обратить внимание на то, что когда вы используете этот метод,
основной способ защиты сессии **не будет включён по умолчанию**.
Очень важно обратить внимание на то, что когда вы используете этот метод,
основной способ защиты сессии **не будет включён по умолчанию**.
Вам также потребуется добавить следующие Rack middleware для этого:
@ -1628,7 +1590,7 @@ end
повысить производительность, перенеся `"bar"` в метод-помощник, используемый и в
`/foo`, и в `/bar`.
Если вы хотите, чтобы запрос был отправлен в тот же экземпляр приложения,
Если вы хотите, чтобы запрос был отправлен в тот же экземпляр приложения,
а не в его копию, используйте `call!` вместо `call`.
Если хотите узнать больше о `call`, смотрите спецификацию Rack.
@ -1737,7 +1699,7 @@ post '/:message' do
end
```
Также клиент может закрыть соединение при попытке записи в сокет. В связи с
Также клиент может закрыть соединение при попытке записи в сокет. В связи с
этим рекомендуется выполнить проверку `out.closed?` прежде, чем пытаться произвести запись.
### Логирование
@ -1996,8 +1958,8 @@ send_file 'foo.png', :type => :jpg
<dt>status</dt>
<dd>
Код ответа. Полезно в том случае, когда отсылается статический файл в качестве
страницы с сообщением об ошибке. Если поддерживается обработчик Rack, будут использоваться
другие средства, кроме потоковой передачи из процесса Ruby. Если вы используете
страницы с сообщением об ошибке. Если поддерживается обработчик Rack, будут использоваться
другие средства, кроме потоковой передачи из процесса Ruby. Если вы используете
этот вспомогательный метод, Sinatra автоматически обрабатывает запросы диапазона.
</dd>
</dl>
@ -2164,8 +2126,8 @@ end
файл на самом деле, а вызывает заданный блок для всех возможных путей. Дело тут не в
производительности, а в том, что `render` вызовет `break` как только файл
будет найден. Содержимое и местонахождение шаблонов будет закэшировано в том случае,
если приложение запущено не в режиме разработки (`set :environment, :development`).
Вы должны помнить об этих нюансах, если пишите по-настоящему "сумасшедший"
если приложение запущено не в режиме разработки (`set :environment, :development`).
Вы должны помнить об этих нюансах, если пишите по-настоящему "сумасшедший"
метод.
## Конфигурация
@ -2247,7 +2209,7 @@ set :protection, :except => :path_traversal
set :protection, :except => [:path_traversal, :session_hijacking]
```
По умолчанию Sinatra будет устанавливать `session based` защиту только если
По умолчанию Sinatra будет устанавливать `session based` защиту только если
включена опция `:sessions`. См. ["Использование сессий""](#Использование-сессий).
Иногда вы захотите настроить сессии "вне" приложения Sinatra, например, в
config.ru или при помощи отдельного экземпляра `Rack::Builder`. В таком случае
@ -2291,7 +2253,7 @@ set :protection, :session => true
<dt>bind</dt>
<dd>
используемый IP-адрес (по умолчанию: <tt>0.0.0.0</tt> <em>или</em>
<tt>localhost</tt> если опция `environment` настроена на "development").
<tt>localhost</tt> если опция `environment` настроена на "development").
Используется только встроенным сервером.
</dd>
@ -2328,13 +2290,13 @@ set :protection, :session => true
<dt>mustermann_opts</dt>
<dd>
хэш настроек по умолчанию для перехода к Mustermann.new при компиляции
хэш настроек по умолчанию для перехода к Mustermann.new при компиляции
маршрутов маршрутизации.
</dd>
<dt>port</dt>
<dd>
порт, на котором будет работать сервер.
порт, на котором будет работать сервер.
Используется только встроенным сервером.
</dd>
@ -2361,7 +2323,7 @@ set :protection, :session => true
<dt>quiet</dt>
<dd>
отключает журналы, созданные командами запуска и остановки Sinatra.
отключает журналы, созданные командами запуска и остановки Sinatra.
<tt>false</tt> по умолчанию.
</dd>
@ -2395,7 +2357,7 @@ set :protection, :session => true
<dt>server</dt>
<dd>
сервер или список серверов, которые следует использовать в качестве
встроенного сервера. Порядок задаёт приоритет, по умолчанию зависит
встроенного сервера. Порядок задаёт приоритет, по умолчанию зависит
от реализации Ruby.
</dd>
@ -2417,7 +2379,7 @@ set :protection, :session => true
<dt>session_store</dt>
<dd>
используемая Rack "прослойка" для сессии. По умолчанию <tt>Rack::Session::Cookie</tt>.
используемая Rack "прослойка" для сессии. По умолчанию <tt>Rack::Session::Cookie</tt>.
Смотрите раздел "Использование сессий" выше.
</dd>
@ -2427,7 +2389,7 @@ set :protection, :session => true
включено только в окружении <tt>"development"</tt>.
</dd>
<dd>
может также быть установлено в <tt>:after_handler</tt> для запуска специфичной
может также быть установлено в <tt>:after_handler</tt> для запуска специфичной
для приложения обработки ошибок, перед показом трассировки стека в браузере.
</dd>
@ -2479,7 +2441,7 @@ set :protection, :session => true
`not_found` и `error`, чтобы вы могли увидеть стек вызовов. В окружениях
`"production"` и `"test"` шаблоны по умолчанию кэшируются.
Для запуска приложения в определённом окружении установите переменную
Для запуска приложения в определённом окружении установите переменную
окружения `APP_ENV`:
```shell
@ -2520,7 +2482,7 @@ end
Обработчик ошибок `error` будет вызван тогда, когда исключение выброшено из блока
маршрута либо из фильтра. Тем не менее, обратите внимание на то, что в режиме разработки
он будет запускаться только в том случае, если вы установите опцию "show exceptions"
он будет запускаться только в том случае, если вы установите опцию "show exceptions"
на `: after_handler`:
```ruby
@ -2578,8 +2540,8 @@ end
```
Sinatra устанавливает специальные обработчики `not_found` и `error`, когда
приложение запущено в режиме разработки (окружение `:development`) чтобы
отображать информативные трассировки стека и дополнительную информацию об отладке
приложение запущено в режиме разработки (окружение `:development`) чтобы
отображать информативные трассировки стека и дополнительную информацию об отладке
в вашем браузере.
## Rack "прослойки"
@ -2662,17 +2624,17 @@ class MyAppTest < Minitest::Test
end
```
Примечание: если вы используете Sinatra в модульном стиле, замените
Примечание: если вы используете Sinatra в модульном стиле, замените
`Sinatra::Application` в примере выше на имя класса вашего приложения.
## Sinatra::Base — "прослойки", библиотеки и модульные приложения
Описание вашего приложения на верхнем уровне хорошо работает для микроприложений,
но имеет значительные недостатки при создании многоразовых компонентов, таких как
Rack "прослойка", Rails metal, простые библиотеки с серверным компонентом или
даже расширения Sinatra. Верхний уровень предполагает конфигурацию стиля
микроприложений (например, одиночный файл приложения, `./public` и `./views`,
каталоги, логирование, страницу подробных сведений об исключениях и т.д.).
Описание вашего приложения на верхнем уровне хорошо работает для микроприложений,
но имеет значительные недостатки при создании многоразовых компонентов, таких как
Rack "прослойка", Rails metal, простые библиотеки с серверным компонентом или
даже расширения Sinatra. Верхний уровень предполагает конфигурацию стиля
микроприложений (например, одиночный файл приложения, `./public` и `./views`,
каталоги, логирование, страницу подробных сведений об исключениях и т.д.).
И тут на помощь приходит `Sinatra::Base`:
```ruby
@ -2699,11 +2661,11 @@ end
`Sinatra::Base`.
`Sinatra::Base` — это чистый лист. Большинство опций, включая встроенный
сервер, по умолчанию отключены. Смотрите
[Опции и конфигурация](http://www.sinatrarb.com/configuration.html)
для детальной информации об опциях и их поведении. Если вы хотите, чтобы
поведение было более похоже на то, когда вы определяете своё приложение
на верхнем уровне (также известно как классический стиль), вы можете
сервер, по умолчанию отключены. Смотрите
[Опции и конфигурация](http://www.sinatrarb.com/configuration.html)
для детальной информации об опциях и их поведении. Если вы хотите, чтобы
поведение было более похоже на то, когда вы определяете своё приложение
на верхнем уровне (также известно как классический стиль), вы можете
унаследоваться от `Sinatra::Application`:
```ruby
@ -3091,7 +3053,7 @@ thin --threaded start
<dl>
<dt>Ruby 2.3</dt>
<dd>
Версия 2.3 полностью поддерживается и рекомендуется. В настоящее время нет
Версия 2.3 полностью поддерживается и рекомендуется. В настоящее время нет
планов отказаться от официальной поддержки.
</dd>
@ -3103,7 +3065,7 @@ thin --threaded start
<dt>JRuby</dt>
<dd>
Официально поддерживается последний стабильный релиз JRuby. Не
Официально поддерживается последний стабильный релиз JRuby. Не
рекомендуется использовать расширений на C в JRuby. Рекомендуется
выполнить <tt>gem install trinidad</tt>.
</dd>
@ -3125,8 +3087,8 @@ thin --threaded start
работает на этой версии, а на поддерживаемой работает — это не наша проблема,
а их.
Мы также запускаем наши CI-тесты на ruby-head (будущие версии MRI), но мы не
можем ничего гарантировать, так как ведётся постоянная разработка.
Мы также запускаем наши CI-тесты на ruby-head (будущие версии MRI), но мы не
можем ничего гарантировать, так как ведётся постоянная разработка.
Предполагается, что предстоящие релизы 2.x будут полностью поддерживаться.
Sinatra должна работать на любой операционной системе, в которой есть одна из

View File

@ -61,7 +61,6 @@ ruby myapp.rb
* [Creole 模板](#creole-模板)
* [MediaWiki 模板](#mediawiki-模板)
* [CoffeeScript 模板](#coffeescript-模板)
* [Stylus 模板](#stylus-模板)
* [Yajl 模板](#yajl-模板)
* [WLang 模板](#wlang-模板)
* [在模板中访问变量](#在模板中访问变量)
@ -221,7 +220,7 @@ end
路由范式可以包含可选参数:
```ruby
```ruby
get '/posts/:format?' do
# 匹配 "GET /posts/" 和任意扩展 "GET /posts/json"、"GET /posts/xml" 等
end
@ -966,42 +965,6 @@ erb :overview, :locals => { :text => mediawiki(:introduction) }
</tr>
</table>
#### Stylus 模板
<table>
<tr>
<td>依赖项</td>
<td>
<a href="https://github.com/forgecrafted/ruby-stylus" title="Ruby Stylus">
Stylus
</a> 以及一种
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
执行 JavaScript 的方式
</a>
</td>
</tr>
<tr>
<td>文件扩展名</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td>例子</td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
在使用 Stylus 模板之前,你需要先加载 `stylus``stylus/tilt`
```ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :example
end
```
#### Yajl 模板
<table>
@ -2823,7 +2786,7 @@ thin --threaded start
以下 Ruby 实现不受 Sinatra 官方支持,但可以运行 Sinatra
* 老版本 JRuby 和 Rubinius
* Ruby 企业版
* Ruby 企业版
* MacRuby、Maglev、IronRuby
* Ruby 1.9.0 和 1.9.1 (不推荐使用)

View File

@ -729,11 +729,6 @@ module Sinatra
render :less, template, options, locals
end
def stylus(template, options = {}, locals = {})
options.merge! :layout => false, :default_content_type => :css
render :styl, template, options, locals
end
def builder(template = nil, options = {}, locals = {}, &block)
options[:default_content_type] = :xml
render_ruby(:builder, template, options, locals, &block)

View File

@ -227,7 +227,7 @@ module Sinatra
ALLOWED_ENGINES = [
:erb, :erubi, :erubis, :haml, :hamlit, :builder, :nokogiri, :sass, :scss,
:less, :liquid, :markdown, :textile, :rdoc, :asciidoc, :radius, :markaby,
:rabl, :slim, :creole, :mediawiki, :coffee, :stylus, :yajl, :wlang
:rabl, :slim, :creole, :mediawiki, :coffee, :yajl, :wlang
]
def self.prefixed(*names)

View File

@ -1,90 +0,0 @@
require File.expand_path('../helper', __FILE__)
begin
require 'stylus'
require 'stylus/tilt'
begin
Stylus.compile '1'
rescue RuntimeError
raise LoadError, 'unable to find Stylus compiler'
end
class StylusTest < Minitest::Test
def stylus_app(options = {}, &block)
mock_app do
set :views, __dir__ + '/views'
set(options)
get('/', &block)
end
get '/'
end
it 'renders inline Stylus strings' do
stylus_app { stylus "a\n margin auto\n" }
assert ok?
assert body.include?("a {\n margin: auto;\n}\n")
end
it 'defaults content type to css' do
stylus_app { stylus :hello }
assert ok?
assert_equal "text/css;charset=utf-8", response['Content-Type']
end
it 'defaults allows setting content type per route' do
stylus_app do
content_type :html
stylus :hello
end
assert ok?
assert_equal "text/html;charset=utf-8", response['Content-Type']
end
it 'defaults allows setting content type globally' do
stylus_app(:styl => { :content_type => 'html' }) do
stylus :hello
end
assert ok?
assert_equal "text/html;charset=utf-8", response['Content-Type']
end
it 'renders .styl files in views path' do
stylus_app { stylus :hello }
assert ok?
assert_include body, "a {\n margin: auto;\n}\n"
end
it 'ignores the layout option' do
stylus_app { stylus :hello, :layout => :layout2 }
assert ok?
assert_include body, "a {\n margin: auto;\n}\n"
end
it "raises error if template not found" do
mock_app {
get('/') { stylus :no_such_template }
}
assert_raises(Errno::ENOENT) { get('/') }
end
it "passes stylus options to the stylus engine" do
stylus_app { stylus :hello, :no_wrap => true }
assert ok?
assert_body "a {\n margin: auto;\n}\n"
end
it "passes default stylus options to the stylus engine" do
mock_app do
set :stylus, :no_wrap => true # default stylus style is :nested
get('/') { stylus :hello }
end
get '/'
assert ok?
assert_body "a {\n margin: auto;\n}\n"
end
end
rescue LoadError
warn "#{$!}: skipping stylus tests"
end