我会尽量做空:
对数据库使用 Rails 3.2.1 和 mysql2 ;在Ubuntu 11.10上运行
在开发环境中,一切正常
当我在生产中启动我的服务器(WEBrick)时,它启动正常,但在加载任何页面后,它会引发以下错误:
ActiveRecord::ConnectionNotEstablished (ActiveRecord::ConnectionNotEstablished):
activerecord (3.2.1)
lib/active_record/connection_adapters/abstract/connection_pool.rb:374:in
retrieve_connection'
activerecord (3.2.1)
lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in
`retrieve_connection'
activerecord (3.2.1)
lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in
`connection'
...
/home/metjush/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:138:in
`service'
/home/metjush/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/home/metjush/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/server.rb:191:in `block
in start_thread'
在尝试找出任何可能的错误来源,并咨询十亿个不同的网站和类似的报告后,我仍然无法找到错误的原因。我的 database.yml (现在在localhost上运行,并且我的设置在生产环境中与开发相同,哪个有效)很好,我的 Gemfile 没问题(gem ' mysql2'包括,不用担心),生成数据库并且rake db:migrate在迁移它时没有问题...我没有想到或没有任何其他可能的错误来源在互联网上找到?
我强调,这只发生在制作中
感谢您的帮助
编辑发布我的Gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.1'
gem 'mysql2'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
gem 'bcrypt-ruby', :require => 'bcrypt'
gem 'rufus-scheduler'
gem 'gmaps4rails'
希望这会有所帮助 - 虽然我真的没有看到任何错误。
编辑两个
奇怪的是,当我在生产环境中启动rails控制台时没有问题 - MySQL查询工作,模型实例可以毫无问题地保存。当我尝试从浏览器访问数据库时,我只收到上述错误。
答案 0 :(得分:2)
对我来说,它归结为一个配置错误的database.yml文件。要确认格式正确,可以从存储.yml文件的目录中执行以下操作:
irb
require 'yaml'
a = YAML::load(File.open("database.yml"))
如果您有错误,您会在回复中看到类似的内容......
irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> a = YAML::load(File.open("database.yml"))
Psych::SyntaxError: (<unknown>): could not find expected ':' while scanning a simple key at line 17 column 3
from C:/Ruby193/lib/ruby/1.9.1/psych.rb:203:in `parse'
from C:/Ruby193/lib/ruby/1.9.1/psych.rb:203:in `parse_stream'
from C:/Ruby193/lib/ruby/1.9.1/psych.rb:151:in `parse'
from C:/Ruby193/lib/ruby/1.9.1/psych.rb:127:in `load'
from (irb):2
from C:/Ruby193/bin/irb:12:in `<main>'
就我而言,在输入数据库密码时,我忘了在“:”之后留一个空格。
答案 1 :(得分:1)
就我而言,rails版本为3.2.0,spree默认版本为0.40.0。我将狂欢版本更改为1.0.0.rc3,这显示了我的rails兼容性问题,所以我将rails版本更改为3.1.3并且一切顺利。
你可以使用最新的狂欢稳定版本,我猜它是0.70.3。
答案 2 :(得分:1)
我在Rails引擎gem中遇到了类似的问题,并最终将其跟踪到其中一个类的范围声明(例如:scope:due,where ...)。评论说明解决了ActiveRecord::ConnectionNotEstablished
,但导致了一个失败的规范(显然)。
引擎正在使用Combustion gem来为规范包含一个缩小的rails应用程序,并且无论db类型如何都会出现问题。希望在某种程度上有所帮助。
答案 3 :(得分:1)
你必须先创建一个mysql数据库。然后转到您的应用程序目录并使用您的数据库信息编辑database.yml文件(〜/ config / database.yml)。
像:
development:
adapter: msql2
database: your database path
username: mysql username
password: mysql password
pool: 5
timeout: 5000
答案 4 :(得分:1)
您可能已经开始使用此功能,但万一其他人访问此页面,可以尝试以下几种方法。
当您尝试在生产模式下启动服务器时,您确定没有拼写错误吗?
bundle exec rails s --environment=production
如果“生产”中存在拼写错误,当试图启动服务器时,rails不会抱怨,但它会尝试在database.yml文件中查找该拼写错误,因为它不存在,您将收到错误消息提到的
要尝试的另一件事:检查database.yml文件是否格式正确。 YAML非常挑剔标签和空格,因此请在控制台中执行以下操作,仔细检查
irb
require 'yaml'
a = YAML::load(File.open("config/database.yml"))
如果您收到哈希值,那么您的文件就可以了,否则可以解决返回的问题