Что это за файл config.ru и для чего он нужен? - PullRequest
2 голосов
/ 09 марта 2019

Что это за файл config.ru и для чего он нужен в проектах Синатры? В моем талрепе проекта такой код написан:

require './app'
run Sinatra::Application

Ответы [ 3 ]

4 голосов
/ 09 марта 2019

config.ru (.ru означает "rackup") - это файл конфигурации Rack. Rack обеспечивает минимальный интерфейс между веб-серверами, которые поддерживают Ruby и Ruby Framework. Это похоже на реализацию Ruby CGI , которая предлагает стандартный протокол для веб-серверов для выполнения программ.

Rack's run здесь означает, что для запросов к серверу, Sinatra::Application делает контекст выполнения, из которого можно использовать DSL Синатры. Все методы DSL в main затем делегируются этому классу.

По сути, в этом файле config.ru происходит следующее:

Сначала вам требуется код app, который использует DSL Sinatra, затем запустите каркас Sinatra ... так что в контексте Sinatra::Application, если ваш app.rb содержал что-то вроде

get '/' do
  'Hello world!'
end

Блок get будет означать что-то для Rack, в данном случае,

отправить обратно «Привет, мир!»

Что ваше приложение покажет вам в вашем браузере.

2 голосов
/ 09 марта 2019

config.ru - это файл конфигурации по умолчанию для команды rackup со списком инструкций для Rack .

Rack - это интерфейс и архитектура, которые предоставляют язык, специфичный для предметной области (DSL), и связывают приложение с миром Интернета. В двух словах, это позволяет создавать веб-приложения и работать с запросами, ответами (и многими другими веб-технологиями) наиболее удобным способом.

Sinatra и Rails - это веб-фреймворки, поэтому они оба используют Rack:

http://recipes.sinatrarb.com/p/middleware

https://guides.rubyonrails.org/rails_on_rack.html

0 голосов
/ 09 марта 2019

Rack обеспечивает минимальный интерфейс между веб-серверами, поддерживающими Ruby и Ruby.

Интерфейс предполагает, что у вас есть объект, который отвечает на метод вызова (например, proc) и возвращает массив с:

  • Код ответа HTTP
  • Хэш заголовков
  • Тело ответа, которое должно отвечать на каждый

Вы можете запуститьбазовый сервер Rack с командой rackup, которая будет искать файл config.ru в текущем каталоге.

Вы можете создать минимальный сервер hello world с помощью:

# config.ru
run Proc.new { |env| ['200', {'Content-Type' => 'text/html'}, ['Hello World']] }
# run this with the `rackup` command

Начиная с Sinatraтак же, как Rails основывается на Rack, он использует rackup для взаимодействия между сервером и фреймворком.Таким образом, config.ru является точкой входа в любую основанную на Rack программу.

Что означает, что он загружает приложение и передает класс Sinatra::Application в стойку, которая имеет метод класса call.

Sinatra::Application затем отвечает за принятие входящего запроса (env) и передача его маршрутам, которые предоставляет ваше приложение, а затем возвращение кода ответа, заголовков и тела ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...