人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

eclipse でRuby o Railsを使う勉強をしようとして、
日経ソフトウエア2007.11の佐藤聖規さんの記事そのままに進めたつもりですが、
(ただし、eclipseやInstantRailsをインストールするときに、C:直下ではなくて、
D:の中にフォルダを作りました)
途中までは特に問題なくできていると思うのですが、最後のアプリケーション作成で
ジェネレータ・ビューでscaffoldを選択しtodoを実行すると、エラーします。

error Before updating scaffolding from new DB schema, try creating a table for your model (Todo)
localhost:3000 のサーバへの接続を確立できませんでした。

こうした開発の基本的な知識は全くありません。
よろしくアドバイスください。

●質問者: hathi
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB eclipse InstantRails localhost Model
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kent0608
●27ポイント

Scaffoldの対象であるModelに対応するテーブルが作られてなさそうですね。

InstantRailsに付属しているphpMyAdminか何かでテーブルが作られているかどうか確認してください。またdatabase.ymlの設定に間違いはないか、書式は間違っていないかも確認してください。

テーブルが作られていなければ、eclipse(Radrailsでしょうか)のメニューからModelジェネレータを起動してModelを作成ください。

cmdから入力する場合は下記のようになります。

ruby script/generate model todo

db/migrate以下にmigrationファイルが作成されるので、下記のように記述します。(適宜、カラム名を変更してください。)

def self.up
 create_table :todos do |t|
 t.column :foo, :string
 t.column :hoge, :string
 end
end

つぎにrake db:migrateと打ち込んでテーブルを作成します。そのとき、MySQLサーバを起動し忘れないようにしてください。

これでテーブルが作成されるので、あとはScaffoldを実行するだけです。

◎質問者からの返答

申し訳ありません。(私にはわかっていないのです)

tableができているか]について

EclipseのRadRailsのRailsナビゲータには、ToDoManagerが表示され、その中にdb\migrate\001_todos.rbと表示されています。

日経ソフトウエアの記事には、テーブル作成が成功すると、「001_todos.rb」というファイルが作成されると書いてあるので、tableはできたのだと思っています。(できていないのでしょうか?)

また、このファイルを編集して、現在は次のコードを記載した状態になっています。

class Todos < ActiveRecord::Migration

def self.up

create_table(:todos) do |table|

table.column(:limit,:timestamp)

table.column(:title,:string)

table.column(:detail,:text)

end

end

def self.down

end

end

日経ソフトウエアの記事では、[次にRakeタスクビューでdb:migradeを選択実行するとtodosテーブルが作成される]と書いてあります。

実行すると、Eclipseのコンソールに<終了>migrate[internal launch]rake(日時)が表示されます。

kent0608の回答にある『そのとき、MySQLサーバを起動し忘れないように』の意味が私にはわかっていません。

なお、Eclipseを立ち上げる前に、Instant Railsは立ち上げてあって、画面では、MySQLの右にStartedと表示されています。

日経ソフトウエアの記事に『常にInstantRailsを起動しておいて』と書かれていたので、Eclpiseを起動している間は常にInstantRailsを起動状態でおいています。


Instant RailsのphpMyAdminを表示させるとテーブルという表記の下にschema_infoと表示されます。テーブルができているのか、何をどう見れば良いのかわかりません。

EclipseのRailsナビゲータのToDoManager\config\environments\database.ymlを見ると、次のようになっていました。

# MySQL (default setup). Versions 4.1 and 5.0 are recommended.

#

# Install the MySQL driver:

# gem install mysql

# On MacOS X:

# gem install mysql -- --include=/usr/local/lib

# On Windows:

# gem install mysql

# Choose the win32 build.

# Install MySQL and put its /bin directory on your path.

#

# And be sure to use new-style password hashing:

# http://dev.mysql.com/doc/refman/5.0/en/old-client.html

development:

adapter: mysql

database: ToDoManager_development

username: root

password:

host: localhost

# Warning: The database defined as 'test' will be erased and

# re-generated from your development database when you run 'rake'.

# Do not set this db to the same as development or production.

test:

adapter: mysql

database: ToDoManager_test

username: root

password:

host: localhost

production:

adapter: mysql

database: ToDoManager_production

username: root

password:

host: localhost


2 ● kent0608
●27ポイント

情報を少し整理しますね

InstantRailsは常に起動してあるようなので、MySQLが起動していない等の初歩的な問題ではなさそうですね。

phpMyAdminを起動した後、画面左の選択エリアからToDoManager_developmentを選択しても、schema_infoしか表示されない場合にはテーブルが生成されていません。

正しくテーブルが作成されていればphpMyAdminの左メニューに

ToDoManager_development(2)

■schema_info

■todos

と表示されます。よってtodosテーブルが作成されていません。

これが原因です。RailsはMigrationにてテーブル構造のバージョン管理をしますが、そのMigration用のファイルには特に問題ないようです。

def self.down
 drop_table :todos 
end

あたりが抜けているような気がしますが、大した問題ではないですね。とするとrake db:migrateでテーブルが作成されるはずですが、実際出来ていないので、途中の手順でエラーが発生していると思われます。rake db:migrateの実行時にエラーメッセージは出ていませんか?

エラーが出ていれば、原因は恐らくToDoManager_developmentというデーターベースを作成する際に名前の綴りを間違えたか、作られていないかどちらかのケースに当てはまると思います。

今一度確認をしてみてください。

◎質問者からの返答

ありがとうございます。

まだ内容を追試確認できていないので、回答できません。今夜チェックします。

佐藤様から画像入りで教えていただいたのがあるので、これを確認してみます。

なお、途中まで同じようなのですが、何を間違えたのか、私のは違っているので………


3 ● Lino
●26ポイント

id:hathiさん

日経ソフトウェアの記事を書いていた佐藤です。

エラーメッセージとid:kent0608さんのやり取りを見る限り、"todosテーブルが作成できていない"の可能性が高いと思われます。

以下を確認していただいてもいいでしょうか?

-----

1.migrateの方法ですが、以下の画像のように入力しているか確認してください。

f:id:lino:20071015231123j:image:w600

クリックすると最大化します。


成功すると、以下のようなログがコンソールビューに出力されます。

== Todos: migrating ===========================================================
-- create_table(:todos)
 -> 0.0930s
== Todos: migrated (0.0930s) ==================================================

2.続いて、phpMyAdminを起動してください。

正常にデータベースが作成できていれば、左フレームから"ToDoManager_development"が選択できるはずです。

選択すると以下の画面が表示されます。

f:id:lino:20071015231122j:image:w600

クリックすると拡大します。


上の画像の丸で囲まれた部分をクリックすると、作成したテーブルの構造を確認できます。

そこでid,limit,title,detailが表示されるか確認してください。

f:id:lino:20071015231121j:image:w600

クリックすると最大化します。

----

参考までに私がtodoテーブルを作成せずに、scaffoldを実行したときのコンソールログをはりつけます。

 exists app/controllers/
 exists app/helpers/
 exists app/views/todos
 exists app/views/layouts/
 exists test/functional/
 dependency model
 exists app/models/
 exists test/unit/
 exists test/fixtures/
 identical app/models/todo.rb
 identical test/unit/todo_test.rb
 identical test/fixtures/todos.yml
 error Before updating scaffolding from new DB schema, try creating a table for your model (Todo)
◎質問者からの返答

佐藤様 恐縮です。現在の環境が追試できないので、今夜確認してみます。

なお、トップの画像はそのままできていますが、後を記憶していないので、……… (すみません)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ