Веб-разработка в стиле PHP на Ruby: создание микрофрейма для этого

#php #ruby-on-rails #ruby #frameworks

#php #ruby-on-rails #ruby #фреймворки

Вопрос:

В PHP world вы можете просто создать index.php файл, поместить некоторый встроенный код и необработанный HTML, запустить Apache, и это просто работает.

Много говорится о плохой практике использования встроенного кода и так далее. Поэтому, пожалуйста, мы не будем обсуждать здесь эту тему.

Как я могу запустить свое приложение Ruby таким же образом? Я хочу использовать ERB для обработки кода, поэтому это будет выглядеть следующим образом

 # index.rb
<h1>Hello world!</h1>
<div>
  1   1 = <%= 1   1 %>
</div>
  

Итак, мои вопросы:

  1. Что заставляет PHP просто работать.
    AFAIU (для понимания) В PHP есть встроенная поддержка HTTP, поэтому мне приходится использовать Rack для поддержки его с помощью Ruby
  2. Некоторые базовые знания для создания my on «микрофрейма»: работа с приложениями / http-серверами (Mongrel, nginx, привязка к http-порту и все подобные задания), работа с HTTP-запросами: сеансами, параметрами, GET / POST и т.д. (Rack?), отправка ответов (создание шаблонов ERB).

Итак, я могу создать свою собственную (в образовательных целях) микроструктуру для веб-разработки в стиле PHP с помощью Ruby : D

UPD

Что я действительно хочу сделать, так это приложение, которое просто получит URL запроса, запустит только этот файл и вернет HTML в качестве ответа. Также этому приложению должно быть разрешено привязываться к какому-либо порту

 index.rb
info/about.rb
info/contacts.rb
products/product.rb
  

итак, он должен проанализировать URL localhost/index.rb и запустить index.rb , localhost/products/product.rb?product_id=10 и выполнить products/product.rb и передать product_id=10 в качестве хэша параметров.

ОБНОВЛЕНИЕ 2

Я думаю, что для начала неплохо покопаться в Camping исходном коде микропрограммы:

https://github.com/camping/camping

Это вес около 5 КБ, поэтому меня это не должно смущать

Комментарии:

1. Почему бы вам просто не использовать Rails или другой фреймворк на основе Ruby? Что вы пытаетесь сделать?

2. @Mike, потому что я хочу знать, как это работает, как я могу создать свой собственный, как я могу его исправить и так далее. Речь идет об обучении. Конечно, в производстве я использую Rails, Sinatra, Camping и другие классные фреймворки Ruby. Но я хочу не просто использовать их, но и понимать. И я пытаюсь создать свою собственную микроструктуру, которая будет работать с отдельными файлами «*.rb», как это делает сайт на чистом PHP.

Ответ №1:

Можно писать CGI-скрипты на Ruby, но обычно это не делается, потому что у нас есть решения получше.

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

Включение имени файла в URL-адрес — еще один неудачный побочный эффект дизайна PHP. Это раскрывает реализацию и не нужно (вы получаете не Ruby-страницу, вы получаете HTML-страницу), поэтому мы также решили этого не делать.

CGI и FCGI в Ruby также работают медленнее, чем другие решения. Это не из-за каких-то ограничений на то, насколько производительными они могут быть; в основном это просто потому, что усилия по ускорению веб-приложений Ruby были потрачены в более полезных областях, таких как Rack и Rails. На самом деле никто не использует CGI, поэтому никто не заботится о том, чтобы сделать это быстро. mod_ruby делает CGI-скрипты несколько быстрее, если вы действительно хотите пойти этим путем, но опять же: есть способы получше.

Комментарии:

1. Спасибо, @Rein, но речь идет не о хорошем и плохом, белом и черном, а о том, как это сделать. Я понимаю все эти побочные эффекты, и я знаю все эти отличные фреймворки, и я использую их в своей работе. Но мне нужно понять это изнутри, написав свою собственную фиктивную микрорамку. Это может быть небольшим и с такими побочными эффектами, но сейчас это не важно: это образование, вы знаете

2. CGI-скрипты — это не микро-фреймворк. Это всего лишь специальная коллекция CGI-скриптов. В этом нет ничего «фреймворкового». Если вы хотите научиться что-то делать, почему бы не научиться лучшему способу?

3. Это похоже на обучение использованию счетов. Конечно, когда-то счеты были отличным инструментом для подсчета, но сейчас у нас есть более совершенные.

4. Нет, вы меня не поняли. Я не только о CGI. Я о том, как сделать это с помощью Ruby. Я могу использовать CGI, или Rack, или что угодно. Но у меня есть цель, и мне нужна отправная точка.

5. Тогда, я думаю, вам было бы лучше использовать настоящий микрофрейм, такой как Sinatra.

Ответ №2:

Apache может запускать PHP, загружая его в модуль mod_php.

Я полагаю, что для запуска ruby вам нужно будет установить его на сервер и загрузить mod_ruby в apache. взгляните на: http://www.modruby.net/en /

Ответ №3:

Вы ищете CGI. Модули Apache, такие как mod_php или mod_ruby , являются просто упаковкой, предоставляемой для CGI-скриптов, написанных на PHP или Ruby.

Комментарии:

1. Нет, mod_php не просто переносит двоичный файл PHP CGI. Это модуль apache, и его внутренняя работа отличается от CGI / FastCGI.