2010-01-24 242 views
6

編輯:解決了這個問題,感謝這個論壇帖子:http://forums.aptana.com/viewtopic.php?f=20&t=7563&p=27407&hilit=libmysql.dll#p27407。感謝大家!Ruby on Rails耙錯誤

我已經開始學習RoR並試圖使用rake db:migrate但我一直得到相同的錯誤。我可以使用C:\dev\railslist>mysql -u root railslist_development -p連接到MySQL數據庫。 rake db:migrate --trace產生如下:

C:\dev\railslist>rake db:migrate --trace 
(in C:/dev/railslist) 
** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:migrate 
rake aborted! 
Mysql::Error: query: not connected: CREATE TABLE 'schema_migrations' ('version' 
varchar(255) NOT NULL) ENGINE=InnoDB 
C:/Ruby19/lib/ruby/gems/1.9.1/gems/activerecord-2.3.5/lib/active_record/connecti 
on_adapters/abstract_adapter.rb:219:in 'rescue in log' 
C:/Ruby19/lib/ruby/gems/1.9.1/gems/activerecord-2.3.5/lib/active_record/connecti 
on_adapters/abstract_adapter.rb:202:in 'log' 
C:/Ruby19/lib/ruby/gems/1.9.1/gems/activerecord-2.3.5/lib/active_record/connecti 
on_adapters/mysql_adapter.rb:323:in 'execute' 
C:/Ruby19/lib/ruby/gems/1.9.1/gems/activerecord-2.3.5/lib/active_record/connecti 
on_adapters/abstract/schema_statements.rb:114:in 'create_table' 
... 

我的database.yml文件如下:

development: 
    adapter: mysql 
    database: railslist_development 
    username: root 
    password: ********** 
    host: localhost 

    ... 

編輯:對不起,我搞混了那裏......我可以連接到MySQL數據庫使用mysql connect localhost - 它產生一長串命令和變量。另外,如果我輸入mysql -h localhost -u root -p,我可以登錄到MySQL提示符。所以要澄清:我可以通過命令行連接到MySQL數據庫,但是在RoR Rake中會產生錯誤。

+0

你的database.yml文件包含什麼? – Mick 2010-01-24 23:40:04

回答

1

這幾乎肯定是因爲你的mysql實例沒有運行,或者你沒有配置config/database.yml指向你的環境(通常是開發)的正確數據庫。這裏有幾件事情嘗試 -

  • 檢查你的config/database.yml中 - 哪裏是你的主機(如果沒有主機 上市,它會連接到localhost)
  • 試運行MySQL -h localhost和 看看mysql是否在運行。

編輯: 如果您無法連接到本地主機數據庫,那麼這個問題是存在的,而不是使用Rails。確保你已經運行,並且你的權限設置正確,以允許你的機器連接。另外,請嘗試以本地機器的根用戶身份進行連接,以查看它是否是一個更細微的問題(例如,您啓用了本地連接,但不是您在Rails中使用的用戶)。

編輯2: 在這種情況下,您的問題可能是您的數據庫尚未創建。只需進入命令行,輸入以下命令:

mysql -u root -p -e 'create database railslist_development;'

這應該創建一個數據庫,並允許您運行遷移。

+0

謝謝,我已經發布了database.yml文件,你能在那裏看到一個問題嗎? – 2010-01-25 00:03:15

+1

解決了問題 - 感謝您的幫助! – 2010-01-25 20:09:07

2

DB未創建。

使用MySQL,你應該創建運行rake db:migrate前DB做:

rake db:create 

或通過SQL命令手動創建數據庫。

 
mysql -h localhost -u root -p 
> CREATE DATABASE railslist_development; 

我希望這可以幫助你。

+0

嗯......調用'rake db:create'會返回一個「數據庫已經存在」的錯誤(我在使用SQL命令之前做過),所以我刪除了數據庫並重試。成功!我檢查了MySQL並創建了數據庫 - 但在調用'rake db:migrate'時仍然出現相同的錯誤。 create': 我打電話時'耙分貝也得到了一種奇怪的錯誤消息 'C:\ dev的\ railslist>耙分貝:創建 (在C:的/ dev/railslist)

:[BUG]分段故障 紅寶石1.9.1p243(2009-07-16修訂版24175)[i386-mingw32] - 控制框---------- c:0001 p:0000 s:0002 b:0002 l:00269c d :00269c TOP ' – 2010-01-25 19:51:44

+0

您認爲這是我遇到的Ruby的錯誤/問題,還是我還沒有設置正確的東西?看起來Ruby *可以與MySQL通信(它創建了數據庫,雖然有錯誤),但在rake db:migrate上失敗。 – 2010-01-25 19:53:45

2

我沒有回答你的問題本身,但既然你只是在學習,爲什麼不堅持現在更簡單的SQLite呢?

+0

謝謝,我會考慮這一點。 – 2010-01-25 20:08:00

3

爲了澄清這裏 - 問題是客戶端MySQL庫目前無法與Rails 2.3一起工作。

要解決這個問題:

  1. 下載一箇舊版本的客戶端庫here
  2. 刪除該文件在Ruby bin目錄的
  3. 重新啓動MySQL服務

    [1]: [1]:http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll「here」

+0

嗨,謝謝你的幫助,你是對的,那是我的問題。不過,我已經解決了它,正如你可以在我的問題的頂部看到的那樣。 – 2010-08-19 09:20:07

+0

這對我有用。另外,確保你的database.yml爲你的本地主機設置了正確的設置。 – hohner 2011-07-10 15:28:53

+0

至少提供學分或引用[這傢伙](http://www.continuousgreg.com/blog/?p=41).. – JMelnik 2011-09-28 16:03:26