Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ysbaddaden/prax.cr
Rack proxy server for development (Crystal port)
https://github.com/ysbaddaden/prax.cr
crystal rack
Last synced: about 2 months ago
JSON representation
Rack proxy server for development (Crystal port)
- Host: GitHub
- URL: https://github.com/ysbaddaden/prax.cr
- Owner: ysbaddaden
- License: other
- Created: 2015-01-30T00:46:12.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2023-03-15T23:25:41.000Z (over 1 year ago)
- Last Synced: 2024-02-17T11:36:08.928Z (7 months ago)
- Topics: crystal, rack
- Language: Crystal
- Homepage:
- Size: 211 KB
- Stars: 151
- Watchers: 10
- Forks: 18
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-crystal - prax.cr - Rack proxy server for development (Web Servers)
README
# Prax
Rack proxy server for development
This is an (almost) complete rewrite of [Prax](https://github.com/ysbaddaden/prax)
in [Crystal](http://crystal-lang.org), a Ruby-inspired language that compiles
down to LLVM. This version should avoid problems with version managers, since Prax
is now a binary application that don't rely on Ruby anymore (except for Rack and
`rackup`).Please refer to the wiki for more information:
- [User Guide](https://github.com/ysbaddaden/prax.cr/wiki/User-Guide)
## Install
You can download a Debian / Ubuntu package for 64bits kernel on the
[releases page](https://github.com/ysbaddaden/prax.cr/releases).
For other systems, you'll have to follow the
[Manual Install Guide](https://github.com/ysbaddaden/prax.cr/wiki/Manual-Install-Guide).## How it works
1. resolves `*.test` and `*.localhost` domains to `127.0.0.1` and `::1` (localhost);
2. redirects the :80 and :443 ports to :20559 and :20558;
3. receives incoming HTTP requests and extracts the hostname (eg: `myapp.test`);
4. serves static files directly if they exist;
4. otherwise spawns a Rack applications (found at `~/.prax/myapp`) if any;
5. and proxies the request to the Rack aplication or a specified port for port forwarding.## Domain Resolver
### systemd
If your distribution uses `systemd-resolved`, just use the `.localhost` TLD
instead of `.test` —be prepared to fight against systemd if you want to use
another TLD, or consider switching to a systemd free Linux.### `.test` TLD
Prax proposes 2 solutions to resolve `.test` and `.localhost` domains:
- a dnsmasq configuration, either throught NetworkManager or by installing
dnsmasq manually (eg. through your Linux distribution package);
- an obsolete and deprecated NSSwitch extension, only compatible wih glibc
and no longer compatible with Google Chrome/Chromium, and certainly more.### nip.io
Prax supports http://nip.io/ domains, so you can use `myapp.129.168.0.1.nip.io`
for example. This is useful when using an external device like a smartphone,
tablet or another computer to test your websites on.### Custom TLD
If `.test` or `.localhost` domains are not your cup of tea, no problem! Prax
will route requests from any TLD to the applications in your `~/.prax`
directory, as long as the domain resolves to localhost.For instance, if you wished to visit `myapp.dev` instead of `myapp.test`, you
could create dnsmasq configuration to resolve `.dev` domains to localhost, too:```
$ sudo tee /etc/dnsmasq.d/dev <Prax wouldn't exist without [Pow!!](http://pow.cx) by Sam Stephenson and
Basecamp. Prax is nothing more but a reimplementation (in another language)
with Linux compatibility in mind.