プログラムなどなど3
をテンプレートにして作成
開始行:
#contents
*私家版:Ruby on Rails + Tritonnによるらくらく全文検索+KW...
オリジナルのページは[[こちら>http://qwik.jp/tritonn/rortu...
2009年7月6日((日本ショウジョウバエ研究会第9回研究集会の夕...
そのときは、
ブックマークはしているけどインストールしていない、最近は...
と答えたのです((系統情報の整理にPerlをかなり使っていたの...
が、インストールしてしまったのでした。~
素のMySQLではなく、全文検索のできるsennaが組み込まれたMyS...
原因はRuby on Railsのバージョンが2であったこと。チュート...
そういった訳で、ほぼチュートリアルと同じ動作をする私家版...
**著作権など [#r2115dc6]
http://qwik.jp/tritonn/rortutorial.html (Last modified: ...
**バージョンなど [#i9926f9e]
ウィンドウズ版を使いました。OSは Windows VISTA Business。
- ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32] ...
- ruby gem 1.3.4: http://rubyforge.org/frs/?group_id=126...
- Ruby on Rails 2.3.2: gemでインストール(たぶん http://...
- tritonn-1.0.12-mysql-5.0.67-win32.zip: http://sourcefo...
mysql Ver 14.12 Distrib 5.0.67, for Win32 (ia32) になる。
rubyの本家本元は、http://www.ruby-lang.org/~
なお、MySQL(Tritonn)はサーバプロセスとして起動しておか...
**0 Tritonnのセットアップ [#we9a3438]
★Tritonnのインストール
tritonn-1.0.12-mysql-5.0.67-win32.zipを解凍し、C:\mysqlに...
-環境変数PATHに"C:\mysql\bin"を追加。(マイコンピュータ→プ...
-C:\my.iniに以下のように記述。「(これは必須ではないが、推...
[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
-mysqldをサービスに登録。管理者権限で実行したコマンドプロ...
cd C:\mysql\bin
mysqld-nt.exe --install MySQL
-MySQLを起動。管理者権限で実行したコマンドプロンプトで
net start MySQL
★rubyをインストール
実際は ActiveScriptRuby 1.8.7(p174) with-winsock2 をイン...
-http://arton.hp.infoseek.co.jp/indexj.html からActiveRub...
-c:\ruby-1.8 にインストールする
-環境変数PATHに"C:\ruby-1.8l\bin"を追加。(マイコンピュー...
★ruby gem をインストール
-http://rubyforge.org/frs/?group_id=126 からrubygems-1.3....
-zipファイルを展開
-管理者権限で実行したコマンドプロンプトで cd し、
ruby setup.rb
★ruby on rails をインストール
引き続き、管理者権限で実行したコマンドプロンプトで
gem install rails
時間が掛かる、10分以上[速いマシンなら速い10Mar2010]
//[よくわからないが……]
// gem install mysql
★不具合?に対処[13Mar2010追加]
C:\mysql\bin\libmysql.dll を C:\ruby-1.8l\bin にコピー~
これをしないとデータベース作成時(rake db:create)にエラ...
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-li...
ruby、rails、tritonn は無事にインストールできていることと...
** 1 アプリケーションの生成から入力フォーム作成まで [#na6...
***事前準備 [#bb33c82f]
Railsを開発するフォルダを決めます。
例:C:\Work
以下では、「○○」と示すことがあります。
***プロジェクト作成 [#n89018aa]
コマンドプロンプトで(管理者権限のコマンドプロンプトでな...
プロジェクト「rordemo」を作成し、データベースにMySQLを設...
cd ○○
rails rordemo -d mysql
rordemoプロジェクトが作成される。フォルダやファイルが一気...
***雛形作成 [#w7407c3a]
cd rordemo
ruby script/generate scaffold article content:text
rordemoプロジェクトの雛形が作成される。フォルダやファイル...
***テーブル作成 [#cf78c5a4]
○○/rordemo/db/migrate/○○_create_articles.rbを変更
《オリジナル》
class CreateArticles < ActiveRecord::Migration
def self.up
create_table :articles do |t|
t.text :content
t.timestamps
end
end
def self.down
drop_table :articles
end
end
- MySQLではストーレージエンジンがデフォルトでInnoDBになっ...
- フルテキストインデックスを作るために、SQL文を発行。ウィ...
《変更後》
class CreateArticles < ActiveRecord::Migration
def self.up
create_table :articles, :options => "ENGINE = MYISAM...
t.text :content
t.timestamps
end
execute "ALTER TABLE articles change content content...
execute "ALTER TABLE articles add FULLTEXT INDEX USI...
end
def self.down
drop_table :articles
end
end
※ 「execute "ALTER TABLE articles change content content ...
-- text: 2&super{16};未満 + 2 byte → 65535 + 2 ってことは...
-- longtext: 2&super{32};未満 + 4 byte → 4,294,967,295 + ...
rake db:create
rake db:migrate
データベースの設定が完了 & 一番簡単な入力フォームの完成
***サーバ起動 [#wb29b2d5]
ruby script/server
(停止は Ctrl+c)
***ページの閲覧 [#d1e7267a]
http://localhost:3000/Articles/
にアクセス
Listing articles
Content
New article
が見えればおっけい
**1.5 おまけ [#uecc2681]
この「おまけ」の項目は単に記録であって、動かすためには何...
***MySQLの権限 [#d5665dfe]
MySQLのユーザ: root
パスワード: なし
これは、○○/rordemo/configdatabase.yml に自動で下のように...
必要に応じて書き換えること、と書くとチュートリアルふうか...
development:
adapter: mysql
encoding: utf8
reconnect: false
database: rordemo_development
pool: 5
username: root
password:
host: localhost
***MySQLにできるデータベースとテーブル [#xbb58ab7]
mysql> show tables; で二つテーブルが見える
データベース: rordemo_development
テーブル: articles, schema_migrations
トラブルがあったらテーブルを二つとも drop してからやり直...
***articles のフィールドなど [#b6686f34]
mysql> desc articles; の結果
|Field | Type | Null | Key | Default | Extra ...
|id |int(11) |NO |PRI |NULL |auto_increm...
|content |longtext |YES |MUL |NULL | ...
|created_at |datetime |YES | |NULL | ...
|updated_at |datetime |YES | |NULL | ...
-id は ○○_create_articles.rb に何も書かなくても自動で作ら...
-t.text :content によって、content が作られる。さらに exe...
-t.timestamps によって、created_at と updated_at が作られる
***インデックスなど [#ze7983a4]
mysql> show index from rordemo_development.articles; の結果
|Table |Non_unique |Key_name |Seq_in_index |Column...
| articles | 0 | PRIMARY | 1 | id ...
| articles | 1 | content | 1 | conte...
~
|Cardinality |Sub_part |Packed |Null |Index_type |Comment...
| 2 | NULL | NULL | | BTREE | ...
| NULL | NULL | NULL | YES | FULLTEXT | ...
CENTER:※ 見やすさ優先のため、左右に長い表を分割しました
-フィールド content に対するフルテキストインデックスがで...
**2 検索機能の追加 [#h0650229]
***ページの作成 [#f67ba107]
generate を利用して、検索を行うページを作成
ruby script/generate controller Search
***コントローラにメソッドを追加 [#t6cabea2]
○○/rordemo/app/controllers/search_controller.rb
にメソッドを追加
《前》
class SearchController < ApplicationController
end
《追加後》
class SearchController < ApplicationController
def index
end
def search_text
@articles = Article.search_text(params[:query])
flash.now[:notice] = "Search result#{@articles.size}...
render(:action => 'search_text')
end
end
***モデルにメソッドを追加 [#y5c45b2f]
○○/rordemo/app/models/article.rb を以下のデータに変更
《前》
class Article < ActiveRecord::Base
end
《追加後》
class Article < ActiveRecord::Base
def self.search_text(query)
find_by_sql(["
select updated_at, match(content) against (?) as score,
kwic(content, 150,3,1,'',' ... ', ?, '<span id=word>',...
from articles where match(content) against(?) order by...
"#{query}","#{query}", "#{query}"])
end
end
***ビューの作成と編集 [#ae4ed1c1]
○○/rordemo/app/views/search/search_text.html.erb を新規作...
<table cellpadding="5" cellspacing="0">
<% for article in @articles %>
<tr valign="top" class="catalogentry">
<td align="left">
<p>date <%=article.updated_at%><p>
<p>score <%=article.score%><p>
<p>snippet <%=article.snippet%><p>
</td>
</tr>
<tr><td colspan="2"><div class="separator"> </div...
<% end %>
</table>
○○/rordemo/app/views/search/index.html.erb
を新規作成し、以下のように編集。utf-8で保存
<p><label for="article_title"><b>検索</b></label></br>
<% form_tag :action => "search_text", :method => "post" ...
<%= text_field(:query,nil) -%><%= submit_tag "検索実行" ...
<% end %>
<br>
[ミスを修正14Mar2010]
***共通レイアウトの設定 [#ke76ddd7]
雛形で作られたレイアウトを共通に使えるよう名前を変える
○○/rordemo/app/views/layouts/articles.html.erb
を
application.html.erb
に
***スタイルシートのカスタマイズ [#lb8d2cb4]
○○/rordemo/public/stylesheets/scaffold.css
(の末尾)にキーワードに対応したスタイルを追記
#word {
background-color: #faf
}
これで検索結果画面のキーワード部分に背景色がつく
***リンクの追加 [#k4e04ab0]
ページ間の移動のためのリンクを追加。しなくても「全文検索+...
-○○/rordemo/app/views/search/search_text.html.erb
ページ先頭に以下の一行を追加。
<%= link_to 'Back', :action => '' %>
これで検索結果画面から、検索画面へ戻れるようになります。
-○○/rordemo/app/views/search/index.html.erb
ページ末尾に以下の一行を追加。utf-8で保存
<a href="../articles/">閲覧/登録</a>
これで検索画面から、記事登録/閲覧画面へ飛べるようになりま...
-○○/rordemo/app/views/articles/index.html.erb
ページ末尾に以下の一行を追加。utf-8で保存
<br /><a href="../search">検索</a>
これで記事登録/閲覧画面から検索画面に飛べるようになります。
|Today:&counter(today);|Yesterday:&counter(yesterday);|To...
終了行:
#contents
*私家版:Ruby on Rails + Tritonnによるらくらく全文検索+KW...
オリジナルのページは[[こちら>http://qwik.jp/tritonn/rortu...
2009年7月6日((日本ショウジョウバエ研究会第9回研究集会の夕...
そのときは、
ブックマークはしているけどインストールしていない、最近は...
と答えたのです((系統情報の整理にPerlをかなり使っていたの...
が、インストールしてしまったのでした。~
素のMySQLではなく、全文検索のできるsennaが組み込まれたMyS...
原因はRuby on Railsのバージョンが2であったこと。チュート...
そういった訳で、ほぼチュートリアルと同じ動作をする私家版...
**著作権など [#r2115dc6]
http://qwik.jp/tritonn/rortutorial.html (Last modified: ...
**バージョンなど [#i9926f9e]
ウィンドウズ版を使いました。OSは Windows VISTA Business。
- ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32] ...
- ruby gem 1.3.4: http://rubyforge.org/frs/?group_id=126...
- Ruby on Rails 2.3.2: gemでインストール(たぶん http://...
- tritonn-1.0.12-mysql-5.0.67-win32.zip: http://sourcefo...
mysql Ver 14.12 Distrib 5.0.67, for Win32 (ia32) になる。
rubyの本家本元は、http://www.ruby-lang.org/~
なお、MySQL(Tritonn)はサーバプロセスとして起動しておか...
**0 Tritonnのセットアップ [#we9a3438]
★Tritonnのインストール
tritonn-1.0.12-mysql-5.0.67-win32.zipを解凍し、C:\mysqlに...
-環境変数PATHに"C:\mysql\bin"を追加。(マイコンピュータ→プ...
-C:\my.iniに以下のように記述。「(これは必須ではないが、推...
[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
-mysqldをサービスに登録。管理者権限で実行したコマンドプロ...
cd C:\mysql\bin
mysqld-nt.exe --install MySQL
-MySQLを起動。管理者権限で実行したコマンドプロンプトで
net start MySQL
★rubyをインストール
実際は ActiveScriptRuby 1.8.7(p174) with-winsock2 をイン...
-http://arton.hp.infoseek.co.jp/indexj.html からActiveRub...
-c:\ruby-1.8 にインストールする
-環境変数PATHに"C:\ruby-1.8l\bin"を追加。(マイコンピュー...
★ruby gem をインストール
-http://rubyforge.org/frs/?group_id=126 からrubygems-1.3....
-zipファイルを展開
-管理者権限で実行したコマンドプロンプトで cd し、
ruby setup.rb
★ruby on rails をインストール
引き続き、管理者権限で実行したコマンドプロンプトで
gem install rails
時間が掛かる、10分以上[速いマシンなら速い10Mar2010]
//[よくわからないが……]
// gem install mysql
★不具合?に対処[13Mar2010追加]
C:\mysql\bin\libmysql.dll を C:\ruby-1.8l\bin にコピー~
これをしないとデータベース作成時(rake db:create)にエラ...
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-li...
ruby、rails、tritonn は無事にインストールできていることと...
** 1 アプリケーションの生成から入力フォーム作成まで [#na6...
***事前準備 [#bb33c82f]
Railsを開発するフォルダを決めます。
例:C:\Work
以下では、「○○」と示すことがあります。
***プロジェクト作成 [#n89018aa]
コマンドプロンプトで(管理者権限のコマンドプロンプトでな...
プロジェクト「rordemo」を作成し、データベースにMySQLを設...
cd ○○
rails rordemo -d mysql
rordemoプロジェクトが作成される。フォルダやファイルが一気...
***雛形作成 [#w7407c3a]
cd rordemo
ruby script/generate scaffold article content:text
rordemoプロジェクトの雛形が作成される。フォルダやファイル...
***テーブル作成 [#cf78c5a4]
○○/rordemo/db/migrate/○○_create_articles.rbを変更
《オリジナル》
class CreateArticles < ActiveRecord::Migration
def self.up
create_table :articles do |t|
t.text :content
t.timestamps
end
end
def self.down
drop_table :articles
end
end
- MySQLではストーレージエンジンがデフォルトでInnoDBになっ...
- フルテキストインデックスを作るために、SQL文を発行。ウィ...
《変更後》
class CreateArticles < ActiveRecord::Migration
def self.up
create_table :articles, :options => "ENGINE = MYISAM...
t.text :content
t.timestamps
end
execute "ALTER TABLE articles change content content...
execute "ALTER TABLE articles add FULLTEXT INDEX USI...
end
def self.down
drop_table :articles
end
end
※ 「execute "ALTER TABLE articles change content content ...
-- text: 2&super{16};未満 + 2 byte → 65535 + 2 ってことは...
-- longtext: 2&super{32};未満 + 4 byte → 4,294,967,295 + ...
rake db:create
rake db:migrate
データベースの設定が完了 & 一番簡単な入力フォームの完成
***サーバ起動 [#wb29b2d5]
ruby script/server
(停止は Ctrl+c)
***ページの閲覧 [#d1e7267a]
http://localhost:3000/Articles/
にアクセス
Listing articles
Content
New article
が見えればおっけい
**1.5 おまけ [#uecc2681]
この「おまけ」の項目は単に記録であって、動かすためには何...
***MySQLの権限 [#d5665dfe]
MySQLのユーザ: root
パスワード: なし
これは、○○/rordemo/configdatabase.yml に自動で下のように...
必要に応じて書き換えること、と書くとチュートリアルふうか...
development:
adapter: mysql
encoding: utf8
reconnect: false
database: rordemo_development
pool: 5
username: root
password:
host: localhost
***MySQLにできるデータベースとテーブル [#xbb58ab7]
mysql> show tables; で二つテーブルが見える
データベース: rordemo_development
テーブル: articles, schema_migrations
トラブルがあったらテーブルを二つとも drop してからやり直...
***articles のフィールドなど [#b6686f34]
mysql> desc articles; の結果
|Field | Type | Null | Key | Default | Extra ...
|id |int(11) |NO |PRI |NULL |auto_increm...
|content |longtext |YES |MUL |NULL | ...
|created_at |datetime |YES | |NULL | ...
|updated_at |datetime |YES | |NULL | ...
-id は ○○_create_articles.rb に何も書かなくても自動で作ら...
-t.text :content によって、content が作られる。さらに exe...
-t.timestamps によって、created_at と updated_at が作られる
***インデックスなど [#ze7983a4]
mysql> show index from rordemo_development.articles; の結果
|Table |Non_unique |Key_name |Seq_in_index |Column...
| articles | 0 | PRIMARY | 1 | id ...
| articles | 1 | content | 1 | conte...
~
|Cardinality |Sub_part |Packed |Null |Index_type |Comment...
| 2 | NULL | NULL | | BTREE | ...
| NULL | NULL | NULL | YES | FULLTEXT | ...
CENTER:※ 見やすさ優先のため、左右に長い表を分割しました
-フィールド content に対するフルテキストインデックスがで...
**2 検索機能の追加 [#h0650229]
***ページの作成 [#f67ba107]
generate を利用して、検索を行うページを作成
ruby script/generate controller Search
***コントローラにメソッドを追加 [#t6cabea2]
○○/rordemo/app/controllers/search_controller.rb
にメソッドを追加
《前》
class SearchController < ApplicationController
end
《追加後》
class SearchController < ApplicationController
def index
end
def search_text
@articles = Article.search_text(params[:query])
flash.now[:notice] = "Search result#{@articles.size}...
render(:action => 'search_text')
end
end
***モデルにメソッドを追加 [#y5c45b2f]
○○/rordemo/app/models/article.rb を以下のデータに変更
《前》
class Article < ActiveRecord::Base
end
《追加後》
class Article < ActiveRecord::Base
def self.search_text(query)
find_by_sql(["
select updated_at, match(content) against (?) as score,
kwic(content, 150,3,1,'',' ... ', ?, '<span id=word>',...
from articles where match(content) against(?) order by...
"#{query}","#{query}", "#{query}"])
end
end
***ビューの作成と編集 [#ae4ed1c1]
○○/rordemo/app/views/search/search_text.html.erb を新規作...
<table cellpadding="5" cellspacing="0">
<% for article in @articles %>
<tr valign="top" class="catalogentry">
<td align="left">
<p>date <%=article.updated_at%><p>
<p>score <%=article.score%><p>
<p>snippet <%=article.snippet%><p>
</td>
</tr>
<tr><td colspan="2"><div class="separator"> </div...
<% end %>
</table>
○○/rordemo/app/views/search/index.html.erb
を新規作成し、以下のように編集。utf-8で保存
<p><label for="article_title"><b>検索</b></label></br>
<% form_tag :action => "search_text", :method => "post" ...
<%= text_field(:query,nil) -%><%= submit_tag "検索実行" ...
<% end %>
<br>
[ミスを修正14Mar2010]
***共通レイアウトの設定 [#ke76ddd7]
雛形で作られたレイアウトを共通に使えるよう名前を変える
○○/rordemo/app/views/layouts/articles.html.erb
を
application.html.erb
に
***スタイルシートのカスタマイズ [#lb8d2cb4]
○○/rordemo/public/stylesheets/scaffold.css
(の末尾)にキーワードに対応したスタイルを追記
#word {
background-color: #faf
}
これで検索結果画面のキーワード部分に背景色がつく
***リンクの追加 [#k4e04ab0]
ページ間の移動のためのリンクを追加。しなくても「全文検索+...
-○○/rordemo/app/views/search/search_text.html.erb
ページ先頭に以下の一行を追加。
<%= link_to 'Back', :action => '' %>
これで検索結果画面から、検索画面へ戻れるようになります。
-○○/rordemo/app/views/search/index.html.erb
ページ末尾に以下の一行を追加。utf-8で保存
<a href="../articles/">閲覧/登録</a>
これで検索画面から、記事登録/閲覧画面へ飛べるようになりま...
-○○/rordemo/app/views/articles/index.html.erb
ページ末尾に以下の一行を追加。utf-8で保存
<br /><a href="../search">検索</a>
これで記事登録/閲覧画面から検索画面に飛べるようになります。
|Today:&counter(today);|Yesterday:&counter(yesterday);|To...
ページ名: