Что означает расширение .ru для конфига rack-приложения

November 10, 2014

Я задумался, что означает расширение .ru у файла config.ru и почему приложение не запустится, если поменять расширение на .rb.

Christian Neukirchen, автор оригинального кода запуска rack-приложения, сказал, что это сокрашение от Rack Up. Отдельное расширение он завел, чтобы люди не пытались запустить конфиг с помощью обычного руби.

Так же, изучая исходники, я узнал несколько других секретов rack.

Параметры по умолчанию в config.ru

В файле config.ru можно указать параметры по умолчанию, начав первую строку с символов #\.

#\ -p 3000
run proc { |env| [ 200, {'Content-Type' => 'text/plain'}, ["hello"] ] }

Такое rack-приложение запустится на 3000-м порту, вместо 9292.

Что такое метод run в config.ru

#run это метод класса Rack::Builder , так как конфиг файла для rackup исполняется в контексте Rack::Builder c помощью eval .

Что будет если передать rackup обычный rb-файл

Rackup возьмет класс, который совпадает с именем файла и запустит его как rack-приложение .

# app.rb
# 
# Usage: rackup app.rb

class App
  def self.call(env)
    [ 200, {'Content-Type' => 'text/plain'}, ["hello"] ]
  end
end

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

comments powered by Disqus