刚开始使用rails和Linux几天...... 我想部署到heroku,其中一个最好的做法就是在本地环境中使用postgresql了...我跟着其中一个教程并创建了一个示例应用程序
安装了pg gem。捆绑安装工作正常。 rake db:migrate
可以为我的应用程序工作并创建表。但是......当我尝试运行我的rails页面时会出现这个错误:
ActiveRecord::ConnectionNotEstablished
这是完整追踪的结束:
> activerecord (3.2.3) lib/active_record/connection_adapters/abstract/connection_pool.rb:398:in `retrieve_connection'
activerecord (3.2.3) lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection'
activerecord (3.2.3) lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection'
activerecord (3.2.3) lib/active_record/query_cache.rb:67:in `rescue in call'
activerecord (3.2.3) lib/active_record/query_cache.rb:61:in `call'
activerecord (3.2.3) lib/active_record/connection_adapters/abstract/connection_pool.rb:467:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (3.2.3) lib/active_support/callbacks.rb:405:in `_run__4423031206660944571__call__1711406629982304701__callbacks'
activesupport (3.2.3) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.3) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
activesupport (3.2.3) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.3) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/reloader.rb:65:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
actionpack (3.2.3) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
我正在使用pgadmin 3来查看我的数据库。我创建了一个名为schaller的用户,它与我在Ubuntu中的用户相同
我的database.yml文件:
development:
adapter: postgresql
database: rails
encoding: unicode
username: schaller
password: password123
host: localhost
pool: 5
为了让rails连接到postgres,我还能检查什么?
编辑:
在webrick上的netbeans中启动rails服务器时出现错误
在2012-09-13 23:12:31 +0300开始获取127.0.0.1的“/ gangs /” ActiveRecord :: ConnectionNotEstablished(ActiveRecord :: ConnectionNotEstablished): activerecord(3.2.3)lib / active_record / connection_adapters / abstract /connection_pool.rb:398:in
retrieve_connection' activerecord (3.2.3) lib/active_record/connection_adapters/abstract /connection_specification.rb:168:in
retrieve_connection' activerecord(3.2.3)lib / active_record / connection_adapters / abstract /connection_specification.rb:142:inconnection' activerecord (3.2.3) lib/active_record/query_cache.rb:67:in
rescue in call' ...
编辑我的gem文件中的主要内容:
gem 'rails', '3.2.3'
gem 'pg'
gem 'thin'
编辑: 添加postgresql连接的日志
[local]
2012-09-15 18:05:35 IDT LOG: connection received: host=127.0.0.1 port=44038
2012-09-15 18:05:35 IDT LOG: connection authorized: user=schaller database=postgres
2012-09-15 18:05:35 IDT LOG: connection received: host=127.0.0.1 port=44039
2012-09-15 18:05:35 IDT LOG: connection authorized: user=schaller database=rails
2012-09-15 18:07:26 IDT LOG: connection received: host=127.0.0.1 port=44048
2012-09-15 18:07:26 IDT LOG: connection authorized: user=schaller database=rails
无论如何,当我连接pgadmin 3并且运行命令时,我看到正在写入日志,'rake db:migrate'但是当我运行我的rails应用程序时...
感谢
答案 0 :(得分:1)
好的,所以它已经过了几天..我再次阅读所有的答案和评论,因为我真的需要一个解决方案! @Muhammad Sannan留下的评论诀窍。我是rails的新手,所以我不知道适配器是什么..但在快速谷歌搜索后我运行了这个命令:
gem install activerecord-postgresql-adapter
这就是诀窍:)。
现在一切正常。我只是不明白db:migrate如何在没有这个适配器的情况下工作..答案 1 :(得分:0)
我认为问题出在你的database.yml上。你错过了生产部分,就像我认为你在heroku上使用的模式一样。只需添加
production:
adapter: postgresql
database: rails
encoding: unicode
username: schaller
password: password123
host: localhost
pool: 5
到heroku上的database.yml
答案 2 :(得分:0)
好吧,如果你能在pgadmin中看到db,你知道基本的连接细节是正确的。如果您没有在pgadmin中修改,则端口号或其他详细信息也不太可能发生变化。
所以 - 我们需要找出发生了什么。第一步是在PostgreSQL中打开连接日志记录,看看rails是否实际连接。设置log_connections
并重新启动PG,然后查看会发生什么。如果你没有在日志中看到任何内容,但是从pgadmin看到,那么rails没有看到正确的连接设置。
http://www.postgresql.org/docs/current/static/runtime-config-logging.html#GUC-LOG-CONNECTIONS