Proximo is an easily configurable proxy for developing locally against a remote server.
Why would you desire such a thing? I envy anyone who has never encountered a legacy application so mysterious and monstrous that a single development environment (configured before the dawn of recorded history) must be shared among all developers. Code changes must be manually uploaded to the shared development environment before they are confirmed to work. The environment starts to drift farther and farther away from what's in source control.
Download or clone this repository.
Copy or rename proximo.example.yml to proximo.yml.
hostsfile with the local hostnames required.
Start server with
sudo ruby proximo.rb
This is a minimal configuration. Requests directed to local.foo.com (mapped to 127.0.0.1 in your hosts file) will use this configuration. The server attempts to serve the requested file from the docroot. If not found, it forwards the request to the remote server.
local.foo.com: docroot: ~/apps/foo proxy: www.foo.com
You can also specify that certain requests should always be forwarded to the remote server, even if they exist in the docroot. This is useful for JSP, ASP, PHP files that you cannot be served dynamically from your machine.
local.foo.com: docroot: ~/apps/foo proxy: www.foo.com always_from_remote: - /time - *.php
If you are unfortunate enough to need to forward requests to multiple remote hosts (we were) you can use this alternative format for specifying the remotes:
local.foo.com: docroot: ~/apps/foo proxy: default: www.foo.com others: - for: /articles/* use: localhost:3000
This app was a quick hack that solved a real-life problem and saved lives. But I'm not happy with the central configuration file, and the need to hack on your hosts file. Here's what I'd like to improve:
- Package as a gem, with a
proximobinary that accepts basic configuration (port, remote host, etc.) as command-line arguments.
- Allow more complex configuration to be versioned in a
.proximofile that is automatically picked up by the Proximo binary.
- Refactor proxy to forward all HTTP headers automatically.
- Refactor to use Rack instead of Sinatra.