Rails server starts but AR Connection not established for reading role - ruby-on-rails

A confusion with the pg gem compiled against some previous version of homebrew, leading to the reinstallation of postgresql, led to uninstalling and reinstalling the pg gem.
gem uninstall pg gem install pg
Subsequently, the rails console and server can be activated, and while the former can be used, the server returns an error when previously this had never been seen. Needless to say, nothing else changed in the application in the meantime.
Processing by HomeController#hello as HTML
Completed 500 Internal Server Error in 5ms (Allocations: 3461)
ActiveRecord::ConnectionNotEstablished (No connection pool for 'ActiveRecord::Base' found for the 'reading' role.):
pointing to an issue with config/database.yml
There, the default suggestion fro Rails 7 indicates:
# On macOS with Homebrew:
# gem install pg -- --with-pg-config=/usr/local/bin/pg_config
but /usr/local is an empty directory and the install command with those options fails
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
the simple gem install command yields:
gem install pg
Building native extensions. This could take a while...
Successfully installed pg-1.4.3
Parsing documentation for pg-1.4.3
Installing ri documentation for pg-1.4.3
Done installing documentation for pg after 0 seconds
1 gem installed
database.yml is configured by stock rails installation:
default: &default
adapter: postgresql
encoding: unicode
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
primary:
<<: *default
database: mrt_development
username: deploy_root
password: [...]
primary_replica:
<<: *default
database: mrkt_test
username: deploy_readonly
password: password
replica: true
The [rails guide][1] provides no indications as to 'reading' roles.
What should be done to get a proper connection running?
[1]: https://guides.rubyonrails.org/configuring.html#database-pooling
Update
Interesting behaviour observed: a deployment has led to the same error being generated on the remote server.

Related

Ruby on Rails - could not load postgres adapter

Building a rails app on heroku (locally). Following their tutorials for rails, and installing postgres locally.
When ever I run the server or generate a migration I get the following err:
LoadError (Could not load 'active_record/connection_adapters/posgtres_adapter'. Make sure that the adapter in config/database.yml is valid. If you use an adapter other than 'mysql', 'mysql2', 'postgresql' or 'sqlite3' add the necessary adapter gem to the Gemfile.):
database.yml:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
development:
<<: *default
database: myapp_development
username: Name
password: secret
host: localhost
Gem file has: gem 'rails' '4.2.0', and gem 'pg' installed
my machine's OS: Windows 64x
Any and all help appreciated.
Doubtful this is the same issue you are having but, posting these details in case it gives a lead. I'm using Windows 10
I had the same error message. To troubleshoot, I tried to do a reinstall of pg with 'gem install pg' but a file was locked.
Found I had a process still using one of the PG files and shut down the process, deleted the entire pg directory found at C:\Ruby200-x64\lib\ruby\gems\2.0.0\gems\pg-0.18.3-x64-mingw32
Reran 'gem install pg' rake db:setup, rake db:create, rake db:migrate and the error was gone.

'require': can not load such file -- sqlite3/sqlite3_native (LoadError)

Getting this error while learning tutorial from this site.
http://ruby.railstutorial.org/chapters/a-demo-app#sec-demo_users_resource
tried to run this rails command on windows
rails generate scaffold User name:string email:string
and getting such error as:
> .../lib/sqlite3.rb:6:in 'require':cannot load such file -- sqlite3/sqlite3_native(LoadError)
>../lib/sqlite3.rb:2:in rescue in <top(required) >
>../bundler/runtime.rb:72:in 'require'
>.../bundler/runtime.rb:72:in block (2 level)
>from bin/rails:4: in 'require'
>from bin/rails:4: in <main>
I have already tried other answers like adding directory of sqlite to PATH..(its already there C:\RailsInstaller\Ruby2.0.0\lib\ruby\gems\2.0.0\gems\sqlite3-1.3.7-x86-mingw32)..
sqlite3(1.3.7-x86-mingw32 )is there in my gem list but still getting this error.
I have also tried to put sqlite3ext.h and sqlite3.h into /ext folder but its not working
tried this command
gem install sqlite3 --platform=ruby -- --with-sqlite3-dir=C:/path/to/sqlite3
no results
here is the Content of my database.yml
here is the database.yml file contents
# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: sqlite3
database: db/production.sqlite3
pool: 5
timeout: 5000
UPDATE:
As adviced by one the user which really help me " you'll run into several problems that will be frustrating purely because on Windows. If you can't remove Windows, download Virtual Box and use a Linux Distro on it. It will make life much easier for you." Switching to Linux resolved everything. thanks https://stackoverflow.com/users/1092260/althaf-hameez for this advice.
See https://stackoverflow.com/a/16748607/2466276.
My actions:
1. Download http://packages.openknapsack.org/sqlite/sqlite-3.7.15.2-x86-windows.tar.lzma
2. Unpack to C:\Knapsack\x86
3. gem uninstall sqlite3
4. gem install sqlite3 --platform=ruby -- --with-opt-dir=C:/Knapsack/x86

Rails: Deploying to Heroku, Many Problems

Trying to deploy my rails app to Heroku for the first time, I ran into many problems. The app crashed, and you can look at the logs in the image: http://i.stack.imgur.com/bsx1b.png
Even worse, when I tried to look at my application locally, it failed to work on postgreSQL environment.It worked fine when I went back to use sqLite3 in database.yml. I thought the problem might be that I actually have to install postgreSQL, in addition to adding pg gem and running bundle install.
I went ahead to install PostgreSQL with the one-click installer (Windows 7 64bit). After reboot, a simple rails server or bundle install commands started failing, so I reinstalled the entire ruby & rails.
Now rails server command works fine, and it prompts a different error when I try to look at my app on local environment. So right now I have pgAdmin III and Rails
PG::Error
fe_sendauth: no password supplied
I tried to follow this, but I couldn't find "pg_hba.conf." I guess the answer was based on a different OS.
And now again, the bundler is not working, giving me errors...
Questions:
1) Was I right to install postgreSQL with the one-click installer? Because this caused my ROR to "crash" somehow, and I had to reinstall rails altogether. 2) I think I am going to delete everything related to postgreSQL, reinstall Rails, and start everything from beginning. What are the steps that I have to take? All the references I've looked at do not seem to fit Windows environment.
In my gemfile, I have
gem 'pg'
gem 'thin'
In my database, I have
# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
development:
adapter: postgresql
encoding: utf8
database: mangfeel_development
pool: 5
timeout: 5000
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: postgresql
encoding: utf8
database: mangfeel_test
pool: 5
timeout: 5000
production:
adapter: postgresql
encoding: utf8
database: mangfeel_production
pool: 5
timeout: 5000
Errors I'm getting at this moment, after installing PostgreSQL:
c:\ruby\myapp>rails server
C:/Program Files (x86)/ruby-1.9.2/lib/ruby/site_ruby/1.9.1/rubygems.rb:926:in `report_activate_error': Could not find RubyGem railties (>= 0) (Gem::LoadError)
from C:/Program Files (x86)/ruby-1.9.2/lib/ruby/site_ruby/1.9.1/rubygems.rb:244:in `activate_dep'
from C:/Program Files (x86)/ruby-1.9.2/lib/ruby/site_ruby/1.9.1/rubygems.rb:236:in `activate'
from C:/Program Files (x86)/ruby-1.9.2/lib/ruby/site_ruby/1.9.1/rubygems.rb:1307:in `gem'
from C:/RailsInstaller/Ruby1.9.3/bin/rails:18:in `<main>'
When I run bundle install:
Gem::InstallError: The 'json' native gem requires installed build tools
Please update your PATH to include build tools or download the DevKit
from 'http://rubyinstaller.org/downloads' and follow the instructions
at 'http://github.com/oneclick/rubyinstaller/wiki/Development-Kit'
An error occurred while installing json (1.7.5), and Bundler cannot continue.
Make sure that `gem install json -v '1.7.5'` succeeds before bundling.
So I will just remove pgAdminIII, PostgreSQL, Ruby on Rails entirely, and start from scratch.
I thought deploying wasn't going to be this hard, but moving from SQLite3 to PostgreSQL is taking more time and effort than I thought it would. I would really appreciate some help on this problem.
------------------------------------------------------------------------------------------------------------------------
UPDATE: AFTER REINSTALLING EVERYTHING, I'M DOING THE SETUP AGAIN FROM SCRATCH.
I checked that my SQLite3 version app worked fine. So I moved onto setting up postgreSQL. I got the following error when I first set up my postgreSQL. By setting up, I mean editing config/database.yml and installing the gem 'pg' and removing the gem 'sqlite3.' When I tried to connect to localhost:3000, I got the following error:
ActiveRecord::ConnectionNotEstablished
After some research, I found that there could be more steps to setting the db. So I ran the bundle command,
bundle exec rake db:setup
But then in the console, I got the following error when I ran bundle exec rake db:setup.
Couldn't create database for {"adapter"=>"postgresql", "host"=>"localhost", "encoding"=>"utf8", "database"=>"db/myapp_test", "pool"=>5, "timeout"=>5000}
rake aborted!
could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
c:/ruby/myapp/config/environment.rb:5:in `<top (required)>'
Tasks: TOP => db:schema:load => environment
When I tried to connect to localhost:3000, I got the above error again, instead of ActiveRecord::ConnectionNotEstablished.
Question: What did I do wrong, and how do I solve the problem?
If you have error:
PG::Error
fe_sendauth: no password supplied
You have good news, your app can work with PostgreSQL database now. (But you need to configure some thing)
After installing PostgreSQL, you can create new rails app using PostgreSQL by command:
rails new my_app -d postgresql
This is database.yml will be created:
development:
adapter: postgresql
encoding: unicode
database: my_app_development
pool: 5
username: my_app
password:
test:
adapter: postgresql
encoding: unicode
database: my_app_test
pool: 5
username: my_app
password:
production:
adapter: postgresql
encoding: unicode
database: my_app_production
pool: 5
username: my_app
password:
You see that, three database has username and password field, this is account user in Postgresql, three database in database.yaml file will created by this user. So you need to provide username and password for it. Default after install Postgresql, it created a user with username is postgresql and password is postgresql. You can use it.
If you want to use other user, just open pgAdmin III and create new user by right click on Login Roles and choose New login role to create new user with password. Then put that username and password to database.yaml file.
After that, all you need now, is find and open pg_hba.conf file to make some configure for app can work with PostgreSQL. I'm not using Windows for a long time, so I'm not sure where it is, but you can find in folder you installed PostgreSQL. Example, if you install on E:\ partition, maybe you can find it in:
E:\PostgreSQL\version\data
After you found it, open and find a line:
# "local" is for Unix domain socket connections only
local all all ident sameuser
Change it to:
# "local" is for Unix domain socket connections only
local all all md5
Then restart your Postgresql database. To create database for app, run rake db:create or rake db:create:all. Now your app can using PostgreSQL database now, so happy :).
I am not an expert on Rails, but here is one of my YAML files for a recent deployment i did on heroku with POSTGRES
development:
adapter: postgresql
host: localhost
database: dbname_development
production:
adapter: postgresql
host: localhost
database: dbname_production
Seems like you are missing a parameter called host in case of postgres deployment
Steps to Move From SQLite3 to PostgreSQL on Windows, for an Existing Rails App to Deploy To Heroku:
In your Gemfile, find gem 'sqlite3' and change it to gem 'pg'. Run bundle install.
Download Postgres from here. Choose the one-click installer and select your OS environment (32 or 64 bit). During installation, do NOT choose to install any extra software it recommends you to install. It will possibly mess up your existing Rails and you will have to reinstall Rails.
Now go to config/database.yml, and change it to the following format. The current one is set for SQLite3 and is missing some fields necessary for PostgreSQL.
development:
adapter: postgresql
encoding: unicode
database: my_app_development
pool: 5
username: my_app
password:
test:
adapter: postgresql
encoding: unicode
database: my_app_test
pool: 5
username: my_app
password:
production:
adapter: postgresql
encoding: unicode
database: my_app_production
pool: 5
username: my_app
password:
The adapter is different, and there are fields for username and password. The default username and password is postgresql, but if it doesn't work (it didn't work for me), then go to your pgAdmin, create a new login role to make another username/password (check the option to make it a super user) and use that.
4, At this point, you can create a new app by running
rails new my_app -d postgresql
Run your local server, and try connecting to localhost:3000 to see if the welcome page is showing.
5, If everything is working fine, then all you need to do is create a new PostgreSQL database, and migrate your existing models to it. Run
rake db:create:all
rake db:migrate
Done! Now check if your existing app is working fine locally, and try deploying your app to Heroku.

ActiveRecord::ConnectionNotEstablished with PostgreSQL 9.1.3 and RoR 3.2.5

I just installed PostgreSQL with homebrew:
$ brew install postgresql
I installed the pg gem with:
$ gem install pg -- --with-pg-config= '/usr/local/var/postgres/postgresql.conf'
I changed my app's database.yml to
development:
  adapter: postgresql
  encoding: unicode
  database: rails_dev
  pool: 5
  username: vise890
  password:
test:
  adapter: postgresql
  encoding: unicode
  database: rails_test
  pool: 5
  username: vise890
  password:
production:
  adapter: postgresql
  encoding: unicode
  database: ddb
port: 5432
  pool: 5
  username: postgres
  password: admin
However, whenever i load any page I get the error:
ActiveRecord::ConnectionNotEstablished
I can connect to the db with pgAdmin (u:vise890 P:{none}) and i see the databases.
I am doing example3 from the Ruby on Rails Tutorial
If you want to check the whole thing: Sample App github branch
Thanks in advance guys!
Ok, nevermind. I started from scratch and it worked. Here's the walkthrough in case you are interested

JRuby keeps saying "please install `gem install activerecord-jdbcmysql-adapter"

I am following a simple tutorial and i am using mysql. when i run
jruby -S rake db:create:all
it gives an error message:
Please install the jdbcmysql adapter: `gem install activerecord-jdbcmysql-adapter` (no such file to load -- active_record/connection_adapters/jdbcmysql_adapter)
But I already have this installed. anyone know how to solve this problem? I am using JRuby 1.6.7. (I also have ruby 1.9.3 on my computer, don't know if it matters)
here's my database.yml
development:
adapter: jdbcmysql
database: MyRail2_development
pool: 5
username: root
password: *****
host: localhost
Have you made sure that your Gemfile includes a line that references the adapter gem? e.g.:
platforms :jruby do
gem 'activerecord-jdbc-adapter'
gem 'activerecord-jdbcmysql-adapter'
end
And did you run bundle install, after you updated your GemFile? i.e.:
jruby -S bundle install
It shouldn't matter that you have MRI Ruby 1.9.3 on your machine, as long as you remember to execute the usual Rails tutorial commands prefixed with jruby -S, as you've indicated in your question.

Resources