Rails和MySQL – ActiveRecord :: ConnectionNotEstablished在生产环境中

我会尽量做空:
Rails 3.2.1mysql2用于数据库; 在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查询工作,模型实例可以毫无问题地保存。 当我尝试从浏览器访问数据库时,我只收到上述错误。

对我来说,它归结为一个配置错误的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: (): 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 `
'

就我而言,在输入数据库密码时,我忘了在“:”之后留一个空格。

我遇到过同样的问题。 Spree最新版本仍然与rails 3.2.0 / 3.2.1不兼容,因此请使用rails 3.1.3和最新的spree版本

在我的例子中,rails版本是3.2.0,spree默认版本是0.40.0。 我将狂欢版本更改为1.0.0.rc3,这显示了我的rails兼容性问题,所以我将rails版本更改为3.1.3并且一切顺利。

您可以使用最新的spree稳定版本,我猜它的0.70.3。

你必须先创建一个mysql数据库。 然后转到您的应用程序目录并使用您的数据库信息编辑database.yml文件(〜/ config / database.yml)。

喜欢:

 development: adapter: msql2 database: your database path username: mysql username password: mysql password pool: 5 timeout: 5000 

我在Rails引擎gem中遇到了类似的问题,并最终将其跟踪到其中一个类的范围声明(例如:scope:due,where …)。 评论说解决了ActiveRecord::ConnectionNotEstablished但导致了一个失败的规范(显然)。

引擎正在使用Combustion gem来为规范包含一个缩小的rails应用程序,并且无论db类型如何都会出现问题。 希望在某种程度上有所帮助。

编辑: 这是一个铁路问题 。

您可能已经开始使用此function,但万一其他人访问此页面,这里有几件事要尝试。

当您尝试在生产模式下启动服务器时,您确定没有拼写错误吗?

 bundle exec rails s --environment=production 

如果“生产”中存在拼写错误,当试图启动服务器时,rails不会抱怨,但它会尝试在database.yml文件中查找该错误,因为它不存在,您将收到您提到的错误

另一件事:检查您的database.yml文件格式是否正确。 YAML非常挑剔标签和空格,因此请在控制台中执行以下操作进行仔细检查

 irb require 'yaml' a = YAML::load(File.open("config/database.yml")) 

如果你得到一个哈希,那么你的文件没问题,否则修复返回的问题