I'm working at getting a very basic ruby/rails environment up and running, and I am presently unable to connect to it.
I'm working on a Macbook (updates current), and I've got an Ubuntu VM running that I'm using as my test server.
I have port-forwarding set up for connecting with the VM (hypervisor = VirtualBox)
8083 to 80 (http)
9307 to 3306 (mysql)
2223 to 22 (ssh)
3010 to 3000 (WEBrick)
VM Port-Forwarding Setup Screen
I have not setup a firewall on the server
Using this, I can ssh in, and I can hit "non-rails" sites just fine via Apache. What I can't do is get a basic "hello-world" screen up for the rails environment. I CAN get there if I cut out the VM and start WEBrick ("rails s") directly from the Mac environment and then go to localhost's port 3000, but when I attempt the same thing on the VM and then try to hit port 3010 the same way, I get back a "no data received" response.
WEBrick appears to be running just fine
myserver$ rails s
=> Booting WEBrick
=> Rails 4.2.5.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2016-02-08 09:01:30] INFO WEBrick 1.3.1
[2016-02-08 09:01:30] INFO ruby 2.1.5 (2014-11-13) [x86_64-linux-gnu]
[2016-02-08 09:01:30] INFO WEBrick::HTTPServer#start: pid=3756 port=3000
Turning Apache on/off does not change anything beyond changing the accessibility of the content served by Apache.
I've tried monitoring "log/development.log" in my rails application, and I've also poked around to see if I noticed any clues in any of the various log files under "/var/log", but nothing's jumping out at me.
I am not doing anything fancy here. I just want to get to the "Welcome Aboard!" screen for rails. I thought that getting started would be as simple as setting up the port-forwarding, creating the rails-application, and hitting it from my browser; it's been a few hours now and I'm getting nowhere with this. Apologies if this has a super easy solution that I'm just not seeing.
Related
Where do you configure the IP addresses that are permitted to connect to a Rails app?
I have a simple rails application which I have inherited that runs in a development environment on Ubuntu 14.04.
It was working OK until recently when some changes were merged in from git. Now when I run rails s the application appears to start thin as the server, as expected.
=> Booting Thin
=> Rails 4.2.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on localhost:3000, CTRL+C to stop
netstat shows that rails is in fact listening as expected
tcp 0 0 localhost:3000 *:* LISTEN
I can access the website ok from a browser on the server box using 127.0.0.1:3000 and all appears to work as it should. I can't access it from any other machine as a Connection Refused status is returned because rails is only allowing localhost on port 3000.
If I start Thin from the command line with thin start it returns with a similar setup
>> Using rack adapter
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
But this time Thin is listening for connections from any IP and I can reach the site from another machine. There is a difference in behaviour between starting Thin on its own and starting Thin from rails although both are version 1.5.1. Something in the Rails config is constraining Thin to listen only for connections from localhost.
I have all up to date gems so far as I can tell. I thought the issue might be something to do with eventmachine, but I can't find anything.
Any advice appreciated.
0.0.0.0:3000 is an alias for binding to all interfaces. Localhost is literally only the localhost 127.0.0.1 which is not reachable from outside.
With rails 4 I believe they changed the deafult behavior of rails s so the server no longer listens on external interfaces. You can use
rails s -b 0.0.0.0
This will bind it to 0.0.0.0 (all interfaces),as if you started thin manually.
When you start the server specify the ip on which your rails application will run by binding rails application to specific IP. This can be done with -b option. For example if your ip is 192.168.1.69
rails server -b 192.168.1.69 -p 3000
You need to allow the incoming traffic for the port 3000 when you try to access your app from other devices only with in the same network. check out the documentation for Allowing Incoming Traffic on Specific Ports on ubuntu
Thanks errata
That explains it clearly, and now that I have the keyword "binding", I can see that this question has been asked before. It would be helpful to set the binding in a config file, but it seems this is not possible. I'll try to set an alias for the rails s command and use that.
FYI the change was made in version 4.2 of rails according to the release notes for that version because of a change in the underlying rack library.
I recently switched my development platform from windows 7 to Linux (Debian), i copied entire app directory to Linux, now when i do git status it is showing a list of modified files, while on windows there was nothing to commit status. when i do git diff it looks like there is no change in file content it is just showing all the lines removed (-) and after that exact lines added (+).
Another issue is that the app is running file on port 3000 by rails s but when i tried to run it on port 80 by rails s -p 80 i get following error :
=> Booting Thin
=> Rails 4.1.5 application starting in development on 0.0.0.0:80
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:80, CTRL+C to stop
Exiting
/usr/lib/ruby/vendor_ruby/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)
I have checked that port 80 is free(apache2 was running on it and i killed it) so it should be permission issue as error told (port is in use or requires root privileges), so i again run rails server with sudo:
sudo rails s -p 80
This time i get following error:
git://github.com/bogdan/datagrid.git (at master) is not yet checked out. Run `bundle install` first.
i did bundle install and run above rails server command again but still getting same error.
If it is not an issue for you and the server starts in port 3000, I would suggest you to use that port without using sudo.
Usually when you go against conventions you drive into strange problems, as for instance, having to run the rails command as root, running into other strange problems as the one you are describing.
You are changing your development environment, make it at least at the beginning the least painful for you and follow the development conventions, which is to work in port 3000.
a) git reporting modified files - can be related to the windows newline \n\r while unix expects just a \n. You can try this.
b) As #fer suggested, try using the conventional ports, 3000, 3001, 30xx. They are less likely to clash with something else.
c) Possible issue with the gem or bundler version.
I'm developing a Rails 4 app on Mac OS 10.6.8, and yesterday I started getting errors -- but only in certain browsers, and for certain URLs.
Everything looks fine in the Terminal:
$ rails s
=> Booting WEBrick
=> Rails 4.0.1 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2014-02-24 12:43:47] INFO WEBrick 1.3.1
[2014-02-24 12:43:47] INFO ruby 2.0.0 (2013-06-27) [x86_64-darwin10.8.0]
[2014-02-24 12:43:47] INFO WEBrick::HTTPServer#start: pid=41543 port=3000
But http://0.0.0.0:3000/ in Chrome or Safari produces a 403 error:
403 Forbidden
hefishkUtZiafopyoshGeOnnIbDoufye
That address opens in Firefox, though.
I also tried another address, http://localhost:3000/. Previously, Chrome displayed "No data received" with a frowny face and two buttons, "Reload" and "More". Now it works fine in Chrome. It also works in Safari and Firefox.
Opening http://127.0.0.1:3000 works in Chrome, Safari and Firefox.
This is more of a bump in the road than a blockade, but its randomness is troubling. I don't think I substantially changed my Rails app in the meantime. I even created a new Rails project and got the same error messages.
Also, I've seen other questions on SO where all three addresses suddenly don't work, and just as suddenly start working again later. I'd like to know if there's a better fix than just waiting.
Any help would be very much appreciated.
0.0.0.0 means rails is listening on all interfaces on your box.
When you're accessing the application, pick a specific one (localhost / 127.0.0.1 or your actual IP (you'll have multiple IPs if you have more than one physical or virtual network interface).
I am learning Ruby on Rails with railstutorial.org
I had set everything up and working fine from Chapter 1. However, all of a sudden my next app has an issue.
I run "rails server"
=> Booting WEBrick
=> Rails 3.2.9 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-11-15 00:45:08] INFO WEBrick 1.3.1
[2012-11-15 00:45:08] INFO ruby 1.9.3 (2012-11-10) [x86_64-linux]
[2012-11-15 00:45:08] INFO WEBrick::HTTPServer#start: pid=2752 port=3000
Seems to be working fine, just like with my previous app.
However, I try connecting to localhost:3000 , 0.0.0.0:3000 , 127.0.0.1:3000 on various browsers and they all cannot establish a connection to the server.
Some things to note:
-I was able to connect to localhost just a while ago--it just seems like it suddenly stopped working out of the blue.
-My first app was working perfectly fine, but now it doesn't work for my first app either.
-I don't have firewalls blocking the port, and my hosts file is not the problem.
-I am on Ubuntu 12.10
I almost always find solutions via search, but not this time.. so I need some help please. It's very frustrating as I feel like it's a simple problem that I spent way too long being stuck on.
Thank you.
Try running it in some other port like say 3001 as:
rails server -p 3001
If its working than than try it again on 3000 as the command above.
I thing some other software is using your 3000 port that's why its not responding.
Or for some advanced things see here
with rails 4.2.0, the server binds to localhost by default, instead of 0.0.0.0. When working with a rails in a virtual box, accessing the server from the host computer, the binding address needs to be 0.0.0.0
Start rails server with -b0.0.0.0 to make the rails server accessible from the host computer/browser.
http://guides.rubyonrails.org/4_2_release_notes.html#default-host-for-rails-server
https://github.com/samuelkadolph/unicorn-rails/issues/12#issuecomment-60875268
Make sure you run rake db:create before launching rails s.
I'm using rails 5.0.0.beta3 and was running into this issue. #andrewleung's answer helped me a lot.
It seems like Rails default binding address is messed up on my computer (macOS 10.11.6) ; on some others, it works fine.
The simple solution is just to use rails server -b 127.0.0.1. You can then access your localhost:3000.
My guess here is (hinted from https://serverfault.com/a/544188) that localhost binding is messed up on my computer whereas 127.0.0.1 is more specific.
I had the same issues and i realized it was in the config/environment/production.rb file where config.assets.compile = false must be changed to config.assets.compile = true
However this might in a way render some javascript and sass elements unworking
The issue that it turned out I was having was that my VM had run out of hard drive space and there wasn't even enough left to create the server.pid file. For some reason though, it wasn't throwing an error for this, as the file was being created, but was left blank.
I run into the same issue. It turned out that browser-sync is also running on localhost:3000.
Due to some Rails developer would use browser-sync to test out the front end scripts quickly, I think that could be a popular reason that port 3000 is used.
check your /etc/hosts file..is ip 0.0.0.0 or localhost pointing to some other address.
for me...I was behind a proxy at work and had to do rails s -b 0.0.0.0 -p 3000
I'm following the first Ruby on Rails 3 tutorial from PeepCode and at around 27-29 minutes in, they have us start the Rails server. To the best of my knowledge, I have Rails (and Ruby) successfully installed.
When I run the command rails server (from Windows 7 Command Prompt per the instructions of the video), I get the message:
=> Booting WEBrick
=> Rails 3.1.3 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-12-02 18:37:57] INFO WEBrick 1.3.1
[2011-12-02 18:37:57] INFO ruby 1.9.3 (2011-10-30) [i386-mingw32]
[2011-12-02 18:37:57] INFO WEBrick::HTTPServer#start: pid=5584 port=3000
And it doesn't return to the prompt, indicating that it is running. Also, to me (and compared to the video), this looks like a successful message.
However, when I browse to the URL, http://0.0.0.0:3000, as directed by the video, I get an error (while the video opens to the default index page for Ruby). The error I get is:
Error 108 (net::ERR_ADDRESS_INVALID): Unknown error.
Since I'm using Google Chrome, it also says:
The webpage at http://0.0.0.0:3000/ might be temporarily down or it may have moved permanently to a new web address.
So, I was wondering how to fix this?
0.0.0.0 is the ip address that Webrick is binding to. It means 'listen on all interfaces'. In other words, you can connect to this application from the internal address (localhost or 127.0.0.1) as well as the external address on the network (192.168.1.x or 10.0.10.x or a domain name that resolves to an address this machine has on the network). The server doesn't care where the request comes from.
If, however, you started rails server with the '-b' or '--binding' option and told the server to bind to 127.0.0.1, the server would not respond to requests to the external interface. You could still use 127.0.0.1 or localhost but you could not connect to this server using it's external ip address locally or from another machine.
Going to http:// 0.0.0.0:3000 works on my Linux system and most likely the screencast you were watching was using a mac which would also work. My guess is that 0.0.0.0 isn't supported on Windows.
Just use localhost if you are on the box or the ip address of the box if you are accessing it from another machine. That is what I do, even when I'm running a machine that understands 0.0.0.0.
You can start the server with this command:
rails server -b localhost
But as a lazy typist, in my .bash_aliases, I have this alias
alias rs='r s -b localhost'
With the alias, I can start the server with just:
rs