can't run both phpmyadmin and rails server on cloud9 - ruby-on-rails

I am working on a rails project on cloud9 and I followed this tutorial to install PhPmyadmin.
The problem is that I can't run at the same time a rails server and a php my admin server since they both seem to use the same Port.
To launch my rails server, I use rails s -b $IP -p $PORT.
Here is the error I get:
/usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/socket.rb:205:in `bind': Address already in use - bind(2) for 0.0.0.0:8080 (Errno::EADDRINUSE)
Has anyone an idea how to fix this?

phpMyAdmin is just another PHP application, so it doesn't listen on a port. You should instead check your webserver configuration to see what port it is on. Most webservers tend to default to port 80, though, so it might be some other process.
You can use netstat -tulpn | grep 8080 to find what's using that port and modify either your Rails configuration or the other process to use a different port.

Related

rails app on aws fargate, cant connect via browser

I'm trying to launch a simple rails app on Fargate. I've been following this tutorial: https://scoutapm.com/blog/deploying-to-aws-part-i-running-a-rails-app-on-fargate
I can see the puma server running in the logs listening on localhost:80 but when I navigate to the public IP of the ENI I can't connect to the server.
Any suggestions on what the issue could be? I've made sure the security group is open to all traffic both inbound and outbound.
binding '0.0.0.0' fixed it
rails s -p 80 -b '0.0.0.0'

Rails: Permission denied - bind(2) for “127.0.0.1” port 3000 (Errno::EACCES)

When I try to run my rails server in port 3000 I get this error. I can run the server in a different port and it works but I want that to run in port 3000.
I have tried to check if this port is busy and to kill the process but every time I do that I find the port is free. And I still get this error.
can anyone help me out to solve this? I'm on Windows 10.
Rails 5.0.2
Ruby 2.4.1
This just means there is another server running on Port 3000.
you can get around this and clear kill the running server manually
in the root of your application type:
cd tmp/pids
then you can check to see if there is a file in there called server.
if there is you can remove it. and you can start your server again on port 3000

How to access localhost:1080 on Cloud9

I'm trying to access localhost with specified port on my application on Cloud9 platform. I'm building a ruby on rails app, running a server with command below.
rails s -b $IP -p $PORT
I have a special occasion where I need to access a different port (not localhost:3000). Does anyone know how to do this?
Thanks for the help!
Cloud9 now has multiple external ports (released a few days ago but not yet documented). You can run a service on port 8081 or 8082 and it will be accessible by appending the relevant port to your preview url (e.g. http://project-user.c9.io:8081). Only http works for now, https will be available soon.

Can't connect to Rails server running on EC2 from public IP

I recently have been having a problem with my AWS EC2 instances. The problem is that I cannot hit my Rails servers via public IP, but I can hit localhost and the server will respond.
Here's what I'm doing:
Create new EC2 instance (t2.micro, ubuntu free tier)
Security group has port 22, 80, 3000 open to everyone (0.0.0.0)
SSH to EC2 instance, install rails (I've been using this to install)
Start rails server after install, it's running on port 3000
run "wget localhost:3000" and it returns index.html, yay!
go to my web browser, type in EC2 instance public IP and port 3000 (IP:3000), says it can't connect :(
kill rails server, restart it on port 80, wget works but can't connect via public IP
as a sanity check, I install nginx and run it, and can see the nginx start page on port 80 via public IP... so confused...
So I'm thinking it has something to do with how I'm installing Rails, but I've tried methods other than using that install script but am encountering the same problem... I've even tried creating an entirely new AWS account just in case I screwed up the settings in my original account but haven't had any luck. I have previously been able to get rails running on EC2 instances just fine (in fact I have EC2 instances using the same security group running on my AWS account right now and can hit those public IPs just fine), but am now just banging my head against the wall... any help would be greatly appreciated!
EDIT: For now, I've configured nginx to hit my rails server.... at least that works for now... although I'm still curious why I can't hit my rails server directly...
Check if rails listens on 0.0.0.0 or 127.0.0.1, default is to listen only on localhost.
-b, --binding=IP Binds Rails to the specified IP.
Default: localhost
From the Ruby on Rails 4.2 Release Notes:
Due to a change in Rack, rails server now listens on localhost instead of 0.0.0.0 by default. This should have minimal impact on the standard development workflow as both http://127.0.0.1:3000 and http://localhost:3000 will continue to work as before on your own machine.
If you are using 'rails server' and want to use the default port 3000 then use below:
sudo rails server -b 0.0.0.0
it can be accessed as http://[public_ip]:3000.
If you want to use it as a URL without the port use the below to run the server:
sudo rails server -p 80 -b 0.0.0.0
You just access it as http://[public_ip].
I was running the rails server on default port 3000 on my AWS Ubuntu instance and had allowed this port in the security group, inbound section but still I was unable to access my application by using this.
http://public_ip:3000
I searched a lot and this answer helped me. Explaining the answer. We have to make firewall setting flexible so that our firewall allows port 3000.
You can use this command to check if this port is allowed on firewall or not.
$ sudo iptables -L | grep :3000
If you see nothing it means we have to allow it using this command.
$ sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
This worked for me to get my rails app access on port 3000.

Access webrick/rails from another computer on local network

I have a rails application running on localhost:3000. I wish to access it from another computer on the same network. I feel like i've done this before with ease, but it's giving me some grief. I can ping the IP of the computer just fine, but hitting ip:3000 in the browser doesnt work. I tried launching rails s -b ipaddress as well, and no luck.
Suggestions?
After making sure your server side firewall is open to the incoming connection on high ports (this is normally true and the default port is 3000, so you probably don't have to do anything) you must also start the server like this:
rails server -b 0.0.0.0
which binds it to the universal address. It binds to localhost by default.
Using this method you don't have to bind to port 80, but you can like this:
rails server -b 0.0.0.0 -p 80
(If you're using rvm then you may need to use rvmsudo)
To make this change more permanent edit your config/boot.rb and add this:
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0', Port: 3000)
end
end
end
Then you should only have to use rails s
Source: https://stackoverflow.com/a/29562898/1795429
rails server -b 0.0.0.0 -p 8000
This worked for me. No firewall issues, and no need to give super user permissions.
Yes, this was a good answer in general:
rails server -b 0.0.0.0
If you use Ubuntu, you probably have to open the port in the firewall:
sudo ufw allow 3000
If your system is running in VirtualBox, you have to check your Network Settings.
In the case of network mode NAT you have to click to the extended options and there to Port Forwarding. Add a rule for TCP protocoll, host port 3000 (or any other), and guest port 3000.
Assuming Webrick starts without issue, this is 100% a firewall issue. You should provide some specifications, like what operating system your host is running and whether or not you have administrator privileges as far as controlling the firewall.
If you're on Linux and running the iptables firewall service, you need to add a rule to accept traffic over port 3000. It would look something like:
iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
That command would be a one-time-only solution though, you'd need to extend your current iptables rules script to make it permanent every time your system boots or logs in.
If you're running Windows, depending on whether you're running XP or Vista/7, you'd need to do something similar. I'm going to assume you're in the Vista/7 environment, and you would just need to follow the steps provided through this guide http://windows.microsoft.com/en-US/windows7/Open-a-port-in-Windows-Firewall.
Try running the server on port 80 instead, your firewall is probably blocking port 3000.
I am using foreman to manage my Procfile-based application.
Adding -b 0.0.0.0 to my bundle exec rails s command in Procfile worked for me.
One reason is your ip is not bind to the rails server. You can bind the ip with -b command option.
Usage: rails server [mongrel, thin etc] [options]
-p, --port=port Runs Rails on the specified port.
Default: 3000
-b, --binding=IP Binds Rails to the specified IP.
Default: localhost

Resources