2012-01-23 61 views
0

遷移在使用Ubuntu,當我執行耙分貝亞馬遜的EC2:遷移爲:的ActiveRecord :: ConnectionNotEstablished爲Rails3中的MySQL數據庫耙:在EC2上

bundle exec rake db:migrate RAILS_ENV="production" --trace 

我得到的錯誤的ActiveRecord :: ConnectionNotEstablished如下圖所示

** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:migrate 
rake aborted! 
ActiveRecord::ConnectionNotEstablished 
/usr/local/rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:316:in `retrieve_connection' 

我可以登錄我的配置用戶名和密碼到mysql/database.yml文件 和數據庫是存在的。所以mysql正在運行,這不是問題。

我的config/database.yml文件看起來像:

production: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    database: app_production 
    pool: 5 
    username: root 
    password: password 
    host: localhost 
    socket: /run/mysqld/mysqld.sock 

下面是寶石列表我的寶石:

abstract (1.0.0) 
actionmailer (3.0.3) 
actionpack (3.0.3) 
activemodel (3.0.3) 
activerecord (3.0.3) 
activeresource (3.0.3) 
activesupport (3.0.3) 
arel (2.0.10) 
builder (2.1.2) 
bundler (1.0.10 ruby) 
cgi_multipart_eof_fix (2.5.0) 
daemons (1.0.10) 
erubis (2.6.6) 
eventmachine (0.12.10) 
fastthread (1.0.7) 
gem_plugin (0.2.3) 
i18n (0.6.0) 
mail (2.2.19) 
mime-types (1.17.2) 
mongrel (1.2.0.pre2) 
mysql2 (0.2.7) 
polyglot (0.3.3) 
rack (1.2.5) 
rack-mount (0.6.14) 
rack-test (0.5.7) 
rails (3.0.3) 
railties (3.0.3) 
rake (0.9.2.2) 
rmagick (2.13.1) 
thin (1.2.7) 
thor (0.14.6) 
treetop (1.4.10) 
tzinfo (0.3.31) 
xmpp4r (0.5) 

描述中connection_pool.rb的錯誤是在同一個地方發生的事情在這個post的答案中說,需要在ActiveRecord :: Base上建立連接。該代碼在connection_pool.rb中失敗,因爲它發送的klass = ActiveRecord :: Base沒有連接。所以,我想創建一個類似如下

require 'active_record' 

class MyConnectionBase < ActiveRecord::Base 

     MyConnectionBase.establish_connection(
     :adapter => "mysql2", 
     :host => "localhost", 
     :username => "<your database username>", 
     :password => "<your database password>", 
     :database => File.dirname(__FILE__) + "app_production" 
    ) 
    self.abstract_class = true 
end 

然後我的所有車型的典範my_connection_base.rb繼承MyConnectionBase如下role.rb:

require 'my_connection_base' 

class Role < MyConnectionBase 
    has_and_belongs_to_many :users 
end 

但我仍然得到的ActiveRecord :: ConnectionNotE在我嘗試運行遷移時建立。有什麼我需要做的Rails 3,以確保在執行遷移之前連接到mysql?

+0

'/ run/mysqld/mysqld.sock'是MySQL套接字的實際位置嗎?上週我發現這個問題實際上是在'/ tmp/mysqld.sock'中。 –

+0

@邁克爾 - 這是我檢查的第一件事情之一。實際的套接字是/var/run/mysqld/mysqld.sock,/run/mysqld/mysqld.sock是它的鏈接,即ls -l /run/mysqld/mysqld.sock給出:/ run/mysqld/mysqld。 sock - > /var/run/mysqld/mysqld.sock。這引起了一個問題,我如何檢查套接字是否正常工作? –

+0

如果您可以在命令行上連接,則套接字可能正常工作。 –

回答

0

我能得到的遷移加入分貝的工作:創建到耙命令行,如下圖所示:

bundle exec rake db:create db:migrate RAILS_ENV="production" 

我不知道爲什麼DB:現在需要創建。我沒有提到的一件事是,這些遷移從Rails 2應用程序轉移到Rails 3應用程序。我仍然有在遷移的麻煩創建頁面,如Page.create節我註釋掉如下圖所示:

20101014205123_create_pages.rb

class CreatePages < ActiveRecord::Migration 
    def self.up 
    create_table :pages do |t| 
     t.column :title, :string 
     t.column :permalink, :string 
     t.column :body, :text 
     t.column :created_at, :datetime 
     t.column :updated_at, :datetime 
     t.timestamps 
    end 

# Page.create(:title => "Home", 
#    :permalink => "welcome-page", 
#    :body => "Welcome to Home") 

    end 

    def self.down 
    drop_table :pages 
    end 
end 

它也像初始數據創建可在db/seeds.rb中完成,這是我傳送Page.create代碼的地方。我仍然試圖讓使用工作:

bundle exec rake db:create db:seed RAILS_ENV="production" --trace 

,我得到的錯誤:

uninitialized constant Page 

我能夠通過要求在DB模式來修復這個錯誤/ seeds.rb如下圖所示:

require File.expand_path('../../app/models/page', __FILE__) 

Page.create(:title => "Home", 
      :permalink => "welcome-page", 
      :body => "Welcome to Home") 
+0

從Rails2升級到Rails3時,我遇到了同樣的問題。雖然我還沒有找到解決方案,但我注意到運行'rake db:migrate:status'報告「未配置開發數據庫」。如果深入研究Rails代碼,我發現實際上這些配置在ActiveRecord :: Base中尚未設置。似乎某處db:create正在拾取db:migrate不在的配置。我會繼續調查。 –

0

看到了同樣的問題,因爲你之後,我做了一些挖掘(如下面我對你的答案評論提到)。

事實證明,基本的一塊,我缺少的是在我的config/environment.rb,我用

MyApp::Application.initialize 

,當它試圖讀取我的遷移不良environments/{development,test, ...}.rb文件,這是不引發錯誤。我換成

MyApp::Application.initialize! 

初始化呼叫然後db:migrate通話開始的錯誤,顯示實際問題(這都拿到由initialize吞噬(沒有爆炸)調用)失敗。我的config/development.rb文件編寫不正確,也可能是rails2 => rails3遷移的結果。

db:create保存當天的原因僅僅是因爲它的設置是ActiveRecord::Base.configurations,並且不依賴於環境來加載這些東西,所以在嘗試讀取我的故障環境/文件時並沒有失敗。

當我的環境文件加快速度後,我就在路上。

我希望這會有所幫助。

相關問題