ActiveRecord :: ConnectionNotEstablished错误

时间:2014-01-31 04:38:10

标签: ruby-on-rails activerecord

我已经编写了一个rake任务来更新我正在通过模型进行的数据库。我在我的rake任务中调用了模型的功能,如下所示:

 get_first_student = Student.get_first_id

我写的模型学生如下:

class Students < ActiveRecord::Base
attr_accessible :id, :roll_num :name, :class
self.table_name = 'students'

if Rails.env == "development"
  CONN1 = establish_connection :adapter => "mysql2",
        :database => "mydb_dev",
        :username => "root",
        :password => "" ,
        :host => "localhost"

  CONN2 = establish_connection :adapter => "mysql2",
        :database => "mydb2_dev",
        :username => "root",
        :password => "",
        :host => "1.2.3.4"
 else
  CONN1 = establish_connection :adapter => "mysql2",
        :database => "mydb_prod",
        :username => "root",
        :password => "" ,
        :host => "localhost" 

  CONN2 = establish_connection :adapter => "mysql2",
        :database => "mydb2_prod",
        :username => "root",
        :password => "" ,
        :host => "localhost"
 end

 def self.get_first_id
   p "****"
   p CONN1
   p "****"
   sql = %Q{SELECT MIN(id) FROM mydb.students;}
   first_student_id = CONN1.connection.execute(sql).first[0]
   return first_student_id
 end

运行后,我得到以下输出:

 #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x007f948c223120 @mon_owner=nil,     
 @mon_count=0, @mon_mutex=#<Mutex:0x007f948c2230d0>, @spec=#    
 <ActiveRecord::Base::ConnectionSpecification:0x007f948c2232d8 @config=
{:adapter=>"mysql2",:database=>"mydb_dev", :username=>"root", :password=>"", 
:host=>"localhost"}, @adapter_method="mysql2_connection">, @reserved_connections={}, 
@queue=#<MonitorMixin::ConditionVariable:0x007f948c223080 @monitor=#
<ActiveRecord::ConnectionAdapters::ConnectionPool:0x007f948c223120 ...>, @cond=#
<ConditionVariable:0x007f948c223058 @waiters=[], @waiters_mutex=#
<Mutex:0x007f948c223008>>>, @timeout=5, @size=5, @connections=[], 
@automatic_reconnect=false>

ActiveRecord::ConnectionNotEstablished

2 个答案:

答案 0 :(得分:0)

在rails中,mysql和mysql2 gem中有两个不同的mysql服务器适配器。检查你的gemfile中是否有mysql gem。如果没有,则打开rails console,然后键入ActiveRecord :: Base.establish_connection(“mysql:// your_username:yourpassword @ localhost / yourdatabasename”)。你配置了你的mysql服务器吗?你在所有环境中都遇到了错误吗?通过使用命令'mysql -u USERNAME -p'登录到mysql服务器来检查它,默认情况下是root,而不是密码。

答案 1 :(得分:0)

第二次调用establish_connection时,您创建的第一个池是disconnected,这就是您要使用的CONN1

尽管此方法返回一个ConnectionPool对象,您可以捕获和使用该对象,但值得避免。 ActiveRecord管理连接池,除非您明确不同地进行说明,否则将假定您只希望其中一个处于活动状态。最近,他们添加了一些nice new ways to manage multiple databases

相关问题