How to add a hostname to the LAN so that a Ruby web server, such as WEBrick can serve off that hostname?

153 Views Asked by At

We can use Ruby and WEBrick to start a local web server, just by

ruby -run -e httpd -- -p 8080 .

I have seen some iPhone / iPad app being able to add a hostname of http://awesome.local:1234 on the LAN, so a local Mac, and other computers can connect to it. How can we do this using Ruby, adding the hostname and add it together, if possible, with WEBrick?

1

There are 1 best solutions below

4
Amadan On

It is not possible to do anything with Ruby to do this, because this is not Ruby's problem. Computers deal with translation of host names to IP addresses in two different ways: hosts file and a DNS query.

hosts file is a way to tell a specific computer what addresses it knows about. You edit the file, put in what name maps to what IP address, and when that computer makes a request to one of those names, it knows who to contact. Since you need to have the record in the client's computer, there is nothing you can do on the server to affect it, which is why no amount of fiddling with Ruby or WEBrick will help. Also, iPhones don't have a hosts file you can edit.

When a computer does not know a name, it asks someone who does. This someone is a DNS server, a sort of smart Yellow Pages for computers. Your computer has a DNS server it is configured to work with; if it does not know, it will ask other DNS servers for the information. Notably, the router of your LAN almost certainly has DNS functionality.

Thus, the normal way to do what you want to is to tell your router which address it should tell everyone when asked about awesome.local. How to do this is both off-topic for Stack Overflow (as it is not a programming problem; you could ask on SuperUser), and impossible to answer without knowing the exact make and model of your router.

EDIT: Given that your example involves an iOS device, there is another answer: : Apple devices use Bonjour to yell their own configuration data at each other. It's not the app doing it, it is iOS. You can install Bonjour on most other operating systems. There is also a Ruby gem that implements Bonjour protocol, dnssd. I have not worked with it, so I can't tell you whether or not it will solve your problem.