#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>
Итак, мои вопросы:
- Что заставляет PHP просто работать.
AFAIU (для понимания) В PHP есть встроенная поддержка HTTP, поэтому мне приходится использовать Rack для поддержки его с помощью Ruby - Некоторые базовые знания для создания 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
исходном коде микропрограммы:
Это вес около 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.