サービスの設定に mysqld があるので、起動してみると動いたみたい。
さて、パスワードはなんだ??? 管理ユーザは root なのか???
mysqld は --skip-grant-tables オプションつきで起動すると
権限不要モードで立ち上がる。その状態で mysql mysql で接続して
次のように root のパスワードをクリアできる。
mysql> update user set Password=null where Host='localhost' and User='root';
どうやら RedHat についてくる mysql はこの状態になっている。
(したがって上記は不要)
使える状態にするため root にパスワードを設定する。
# mysqladmin --user=root password <newpass>
なければデータベースを作る
mysql > create table test;
アプリケーション用のユーザーを作る
mysql > grant all privileges on test.* to test@localhost identified by '...';
一応、作成したユーザーでローカルアクセスできるかを確認。
$ mysql -u test -p test
Password:
mysql> show tables;
Rails のインスタンスを作成
$ rails test1
当面は development 部分だけでよいが database 設定を行う(user, password, etc)
$ vi config/database.yml
ちなみに local 接続のソケットはデフォルトが /tmp/mysql.sock になっているようなので
sock: /var/lib/mysql/mysql.sock の一行を入れて適切に変更。このパスは ps -ef | grep mysql
で見つけた。
まずはモデルの作成。
$ ruby script/generate model Book
...
create db/migrate/001_create_books.rb
db/migrate/001_create_books.rb を編集してフィールドを定義
create_table の do block 内にカラムを名前、型で定義。
これで sql を打たなくてもテーブルが作れる。
class CreateBooks < ActiveRecord::Migration
def self.up
create_table :books do |t|
t.column :isbn, :string
t.column :name, :string
t.column :author, :string
t.column :manufacturer, :string
t.column :release_on, :date
end
end
def self.down
drop_table :books
end
end
$ rake migrate
// 実はここで socket がおかしいことに気づいた。
$ rake migrate
== CreateBooks: migrating ====...
-- create_table(:books)
-> 0....
== CreateBooks: migrate (0....s) ===
The rake task migrate has been deprecated, please use the replacement
version db:migrate
メッセージは db:migrate を今後は使いなさいとのこと。
ここで rake と打つとテストをしてくれるらしいが socket のエラーで失敗する。
test 以下のファイルを眺めていると、結局 config の下のファイルに行き着く。
database.yml には test セクションがあり、そこはデフォルトのままだったので
db name, user, pass, socket をなおす。このあとは rake は動作するようになった。
あとは scaffold を Book に対して行えばとりあえず CRUD はできるようになる。
$ ruby script/generate scaffold Book
$ ruby script/server
validation の例:
$ vi app/models/book.rb
class Book < ActiveRecord::Base
protected
def validate
errors.add('isbn', 'format error') unless isbn =~ /\A[0-9X]+\z/
end
end
DB 抜きで簡単なアプリを作りたければ
$ ruby script/generate controller foo
とすると次のファイルができる。
app/views/foo
app/controllers/foo_controller.rb
test/functional/foo_controller_test.rb
app/helpers/foo_helper.rb
このまま foo にアクセスしても Unknown action と出るだけ。
FooController もからだし、view も空っぽだ。
$ vi app/views/foo/index.rhtml
<html>
<head>
<title>Foo</title>
</head>
<body>
<h2>Foo page</h2>
This is the index page for Foo
</body>
</html>
これでも悪くはないがスタイルの適用を考えれば
app/views/layouts 以下に view の名前で rhtml を作り、app/views/<controller>/*.rhtml
は body の中身だけにすると良い。
$ vi app/views/layouts/foo.rhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Foo: <%= controller.action_name %></title>
<%= stylesheet_link_tag 'scaffold' %>
</head>
<body>
<p style="color: green"><%= flash[:notice] %></p>
<%= yield %>
</body>
</html>
$ vi app/views/foo/index.rhtml
<h2>Foo page</h2>
This is the index page for Foo
0 件のコメント:
コメントを投稿