Railsを利用しての新規開発の流れをまとめておく。
前提としては、
・どのようにデータを保持するかModelの設計は完了している。
・Railsを起動してのモックアップは作成済み
・プラグイン導入済み、設定ファイルの設定も完了済み
とします。(つまり、すでにコードが打てる状態とする)
大まかな流れとしては、
1、Model生成とMigrateによるDB作成
2、Scaffoldの作成(今回はスペジェネを利用)
として、細かい調整が可能になる状態までをまとめておきます。
1、Model作成
>ruby script/generate model XXXXXX
Railsの1.1以上だと、この時点でmigrateも生成される。
なおXXXX部分は、1文字目を大文字にして単数形で書く。
2、Migrate の作成
1で出力されているログを見て、Migrateファイルの名前を見つけて編集する。
なお、型の対応は以下のとおり。
:string - varchar(255)
:text - text
:float - float
:integer - int(11)
:datetime- datetime
:date - date
3、Migrateの実行
既に実行している場合、DB上にどのバージョンまで実行したか
保存されているので、追加の場合も以下のコマンドで大丈夫。
>rake db:migrate
4、スペジェネを使う。
scafflodの代わりに「スペジェネ」を利用。
> script/generate special コントローラー名
コントローラー名は単数形で。
とりあえず、こんな感じで。
2007年8月6日月曜日
2007年7月26日木曜日
Form結果のpagenate
以前このブログにpagenateをまとめたが、その後ちょっと問題が
あることが解りました。
<状況>
複数のフォームを持つトップページを作り、1コントローラーにて
複数のメソッドにて受付を行なう。
結果表示はlistのテンプレートを利用しレンダリングさせる。
<問題点>
ユーザー入力なしのpagenateの場合はGETの引数にpageというのがあれば
そのページが表示されて終わりでいいのですが、
Formからの入力後のpagenateの場合、ユーザー入力を引き継ぎつつ
次ページへのリンクを作る必要があります。
以前は
<%= link_to_unless(params[:page].to_i == page.number, page.number, {:params => params.merge('page' => page)}) %>
としていました。
問題は「params.merge」です。
この実行結果に、text_field( :theme, :title) として作られた入力の結果が流れると
theme=title入力
というようにmergeされます。
正しくは「theme[title]=入力」とならないと、メソッドで正常に受け取りが出来ないです。
<解決策>
かっこいい方法が思いつかなかったので、とりあえず下記のように逃げました。
controller
@link_hash = {'theme[title]' => params[:theme][:title]}
View
params.mergeを@link_hash.mergeにする。
もしユーザー入力が無かったという状態も引き継ぐとなるとGETには
theme[title]=
となって欲しいです。
しかし、これは入力が無いためにparamsではnilになります。
そこでcontroller冒頭にて
params[:theme][:title] = "" if params[:theme][:title] == nil
として無理やりnilを回避しました。
ちょっとかっこよく無いのですが、良い案が思いつかないので
とりあえずこれで回避です。
あることが解りました。
<状況>
複数のフォームを持つトップページを作り、1コントローラーにて
複数のメソッドにて受付を行なう。
結果表示はlistのテンプレートを利用しレンダリングさせる。
<問題点>
ユーザー入力なしのpagenateの場合はGETの引数にpageというのがあれば
そのページが表示されて終わりでいいのですが、
Formからの入力後のpagenateの場合、ユーザー入力を引き継ぎつつ
次ページへのリンクを作る必要があります。
以前は
<%= link_to_unless(params[:page].to_i == page.number, page.number, {:params => params.merge('page' => page)}) %>
としていました。
問題は「params.merge」です。
この実行結果に、text_field( :theme, :title) として作られた入力の結果が流れると
theme=title入力
というようにmergeされます。
正しくは「theme[title]=入力」とならないと、メソッドで正常に受け取りが出来ないです。
<解決策>
かっこいい方法が思いつかなかったので、とりあえず下記のように逃げました。
controller
@link_hash = {'theme[title]' => params[:theme][:title]}
View
params.mergeを@link_hash.mergeにする。
もしユーザー入力が無かったという状態も引き継ぐとなるとGETには
theme[title]=
となって欲しいです。
しかし、これは入力が無いためにparamsではnilになります。
そこでcontroller冒頭にて
params[:theme][:title] = "" if params[:theme][:title] == nil
として無理やりnilを回避しました。
ちょっとかっこよく無いのですが、良い案が思いつかないので
とりあえずこれで回避です。
2007年7月20日金曜日
RailsMyAdmin
Railsのプラグインで便利なものがMoonGiftで紹介されていたので
早速試しました。
「RailsMyAdmin」
<機能>
phpMyAdminと同じく、Railsアプリで参照されているDBを
直接操作する機能が提供されます。
<導入手順>
RailsMyAdminはプラグインです。
導入したいアプリで以下のコマンドを打ちます。(Linuxの前提)
プロキシサーバを利用している場合のみ、以下のコマンドを
入力してください。
※提供元の資料からコメント部分を割愛したものです。
判定を行ないます。
これで利用の準備はOKです。
このプラグインの目玉の一つである「Spy」について。
DBを監視し、データの移り変わりをブラウザで見るという機能です。
この機能を使いたいテーブルには「created_at」列が必要になります。
「created_at」が無いとエラーになりますので、作っておいてから利用しましょう。
提供元: RailsMyAdmin
早速試しました。
「RailsMyAdmin」
<機能>
phpMyAdminと同じく、Railsアプリで参照されているDBを
直接操作する機能が提供されます。
<導入手順>
RailsMyAdminはプラグインです。
導入したいアプリで以下のコマンドを打ちます。(Linuxの前提)
プロキシサーバを利用している場合のみ、以下のコマンドを
入力してください。
> set http_proxy=http://proxy.server.jp:8080
> ruby script/plugin install http://railsmyadmin.googlecode.com/svn/trunk/my_admin/次にenvironment.rbに以下の3行を追加します。
> ruby script/generate my_admin
※提供元の資料からコメント部分を割愛したものです。
## MY ADMIN CONFIG最後にapplication.rbに以下のメソッドを追加します。
require 'my_admin/my_admin_tool'
MY_ADMIN_GLOBALS = {:all_models => true, :confirm_destroy => false}
MY_ADMIN_AUTH = Proc.new { |c| c.send('admin_logged_in?') }
def admin_logged_in?もし、この機能にパスワードを付けて利用したい場合は、上記のメソッド内で
return true
end
判定を行ないます。
これで利用の準備はOKです。
http://localhost:3000/my_admin/mainにアクセスすると利用できます。
このプラグインの目玉の一つである「Spy」について。
DBを監視し、データの移り変わりをブラウザで見るという機能です。
この機能を使いたいテーブルには「created_at」列が必要になります。
「created_at」が無いとエラーになりますので、作っておいてから利用しましょう。
提供元: RailsMyAdmin
2007年7月10日火曜日
Rails Tips
細かいTipsが溜まったのでまとめておきます。
1、Distinct
<参考> リンク
SQLのDistinctを使いたい時、find_by_sqlを使ってましたが
やはりちゃんとFindで出来る事が判明。
とのこと。 findのselectがポイントですな。
2、modelとcontrollerの図
これを追加すると、モデルの関係性やControllerの関係性が図になる。
大変便利だし、scaffoldで生成されて使っていないメソッドなどを
整理しないと!と思うので良いと思います。
<参考> RailRoad
なお、「RailRoad as a rake task」という部分のスクリプトを書けば
Rakeで生成出来ます。
インストール前に「Graphviz」のインストールをしておきます。
Ubuntuの場合は、システム>システム管理>Snapticパッケージマネージャより
検索をするとパッケージがありますので、そちらを使うと楽です。
生成されるSVGというファイルは、中を見ると解りますが文字ベースです。
見るときはブラウザにドロップすると見られました。
3、paginageでページ数表示
paginateで出力する場合、画面の一番下にナビゲーションをつけたくなります。
前と後とページ番号の列挙のサンプル
今回はここまで。
1、Distinct
<参考> リンク
SQLのDistinctを使いたい時、find_by_sqlを使ってましたが
やはりちゃんとFindで出来る事が判明。
>> RubricksUser.find(:all, :select => 'distinct *')SELECT distinct * FROM rubricks_users>> RubricksUser.count(:distinct => true, :select=> 'id')SELECT count(DISTINCT id) AS count_id FROM rubricks_users
とのこと。 findのselectがポイントですな。
2、modelとcontrollerの図
これを追加すると、モデルの関係性やControllerの関係性が図になる。
大変便利だし、scaffoldで生成されて使っていないメソッドなどを
整理しないと!と思うので良いと思います。
<参考> RailRoad
なお、「RailRoad as a rake task」という部分のスクリプトを書けば
Rakeで生成出来ます。
インストール前に「Graphviz」のインストールをしておきます。
Ubuntuの場合は、システム>システム管理>Snapticパッケージマネージャより
検索をするとパッケージがありますので、そちらを使うと楽です。
生成されるSVGというファイルは、中を見ると解りますが文字ベースです。
見るときはブラウザにドロップすると見られました。
3、paginageでページ数表示
paginateで出力する場合、画面の一番下にナビゲーションをつけたくなります。
前と後とページ番号の列挙のサンプル
<%- if @theme_pages.current.previous -%>
<%= link_to '前の30件', { :page => @theme_pages.current.previous } %>
<%- else -%>
前の30件
<%- end -%>
|
<%- for page in @theme_pages -%>
<%= link_to_unless(params[:page].to_i == page.number, page.number,
{:params => params.merge('page' => page)}) %>
<%- end -%>
|
<%- if @theme_pages.current.next -%>
<%= link_to '次の30件', { :page => @theme_pages.current.next } %>
<%- else -%>
次の30件
<%- end -%>
今回はここまで。
2007年7月5日木曜日
LinuxでのRails環境構築
windowsですとインスタントRailsがあるので、
開発環境が無いところからRubyのインストールを含む
環境構築が簡単に行なえます。
開発環境が無いところからRubyのインストールを含む
環境構築が簡単に行なえます。
ついにLinuxでも出ました。
まだ試してませんが、これは良さそうですね。
ViewのDRY
Viewを書いていると、他のControllerのAction結果を使いたいことが
多々あります。これをコピペでやってしまうと、DRYが守れません。
ということで、かるくまとめ。
<Viewで他のAction結果を読み込む>
Viewでrender_componentを使います。
<%= render_component :controller => "documents", :action => "list", :id =>@sum.id %>
これで、他のViewにて違うControllerのアクション結果を表示出来ます。
注意点は、呼び出される側のActionで
render :layout => false
を実施しておくこと。
これをしないと<html>も出て来てしまいます。
ということで、この方法を使えば複数のコントロールにあるshowのような
詳細表示部分を、1ページにまとめるなどが簡単に行なえます。便利!
<Action内で、他のAction結果を受け取る>
Viewで使うrender_componentですが、これをControllerのActionで呼び出して
出力されるHTMLを別のActionから返す場合
つまり
--> Action1(受付窓口) --> Action2(処理とHTML生成)
という風にリクエスト内容を送って、Action2の結果をAction1で受け取ってから
リクエスト元に返したい場合はrender_component_as_stringを使います。
これを使うと、評価結果が文字列として取得出来るので、さらにAction1で追加を
書いてから送り返すなども可能です。
この2つを使うことでViewのDRY化がだいぶ進むと思ってます。
概念的に上位のモデルのShowにて、has_manyやhas_oneに
なっている下位のモデルを取得し、そのIDを渡して下位のControllerの
Showを呼び出します。
その結果をはめ込んで送る・・・・というのを繰り返せば、それぞれのモデルの
Showを連携させて1ページを合成することができるし、
ShowからAJAXでEditやDestroyを呼び出す様に変えると
ユーザーの見た目は1つのレコードを編集しているつもりでも、
DB上は複数のテーブルにまたがって修正していることになり、
かつそれらを別々のControllerに置いておけます。
この二つをうまく使うのがViewのDRY化を進める上で不可欠かと思います。
もちろんpartialで逃がすのも手ですが、Partialは一つのモデルに対して
DRYを促進する機能だと解釈してます。
多々あります。これをコピペでやってしまうと、DRYが守れません。
ということで、かるくまとめ。
<Viewで他のAction結果を読み込む>
Viewでrender_componentを使います。
<%= render_component :controller => "documents", :action => "list", :id =>@sum.id %>
これで、他のViewにて違うControllerのアクション結果を表示出来ます。
注意点は、呼び出される側のActionで
render :layout => false
を実施しておくこと。
これをしないと<html>も出て来てしまいます。
ということで、この方法を使えば複数のコントロールにあるshowのような
詳細表示部分を、1ページにまとめるなどが簡単に行なえます。便利!
<Action内で、他のAction結果を受け取る>
Viewで使うrender_componentですが、これをControllerのActionで呼び出して
出力されるHTMLを別のActionから返す場合
つまり
--> Action1(受付窓口) --> Action2(処理とHTML生成)
という風にリクエスト内容を送って、Action2の結果をAction1で受け取ってから
リクエスト元に返したい場合はrender_component_as_stringを使います。
これを使うと、評価結果が文字列として取得出来るので、さらにAction1で追加を
書いてから送り返すなども可能です。
この2つを使うことでViewのDRY化がだいぶ進むと思ってます。
概念的に上位のモデルのShowにて、has_manyやhas_oneに
なっている下位のモデルを取得し、そのIDを渡して下位のControllerの
Showを呼び出します。
その結果をはめ込んで送る・・・・というのを繰り返せば、それぞれのモデルの
Showを連携させて1ページを合成することができるし、
ShowからAJAXでEditやDestroyを呼び出す様に変えると
ユーザーの見た目は1つのレコードを編集しているつもりでも、
DB上は複数のテーブルにまたがって修正していることになり、
かつそれらを別々のControllerに置いておけます。
この二つをうまく使うのがViewのDRY化を進める上で不可欠かと思います。
もちろんpartialで逃がすのも手ですが、Partialは一つのモデルに対して
DRYを促進する機能だと解釈してます。
RailsでのAJAXデバッグ
RailsのAJAXサポートものを使う時に、ちゃんと
Actionno結果が評価されているかが心配になります。
ブラウザの「ソースを表示」では、一番最初に送ったHTMLしか
表示してくれないので、変化した後の状態がわかりません。
ということで、FireFoxのアドオン「Firebug」を使ってみました。
まだ使い込みが甘いので深い使い方は説明出来ませんが、
とりあえず入れただけでも以下の効果がありました。
1、ソースをdiv単位で折りたたんだり出来る為、
RHTMLが展開後どうなったなどが見やすい。
2、AJAXにより書き換えられた様子が見られる。
3、RJSなどで送ったスクリプトが間違っていないか解る。
RailsでのAJAX利用には欠かせないと感じます。
是非お試しを。
Firebug : リンク
Actionno結果が評価されているかが心配になります。
ブラウザの「ソースを表示」では、一番最初に送ったHTMLしか
表示してくれないので、変化した後の状態がわかりません。
ということで、FireFoxのアドオン「Firebug」を使ってみました。
まだ使い込みが甘いので深い使い方は説明出来ませんが、
とりあえず入れただけでも以下の効果がありました。
1、ソースをdiv単位で折りたたんだり出来る為、
RHTMLが展開後どうなったなどが見やすい。
2、AJAXにより書き換えられた様子が見られる。
3、RJSなどで送ったスクリプトが間違っていないか解る。
RailsでのAJAX利用には欠かせないと感じます。
是非お試しを。
Firebug : リンク
Tableのソート
Railsを使って、DBのテーブルの中身を表にする時に
列名でソート出来るように作るにはどうすれば良いか?
パッと考え付くのは、Actionを追加しlink_to_remoteを使って
行なうというくらい。(私の技量の問題はおいておいて。)
ということで、以下の流れをユーザーに提供する手段を探していました。
1、普通のFormを使って、条件を設定し合致するテーブルを生成
2、検索結果をソートする
なお、2のソートの時に通信が発生しない方が私の会社の環境を
考えると良い様に感じました。(海外拠点の回線がかなり細い為。)
そこで見つけたのが「tablesort.js」です。
<使い方>
form_remote_tagを使って、Formを構成する。
検索結果を表示するテーブルをXHTMLで書くこと。
(Rails自体は元々XHTMLを使うことが前提なのですが)
このように、最初tbodyは空にしておいて、form_remote_tagで
listをupdateするようにする。
つまり、ユーザのForm入力がAJAXの動きでサーバに届き、
サーバのActionで<tr><td>---</td></tr>を送り返せば
tbodyの中に結果が入ってきて表示されるようになる。
(AJAXが使えるようになるまでは、FormとTableを別フレームに切り
検索が実行されてもFormが消えないようにしていたが、
この方法なら部分的に書き換えられるだけなのですっきりする。)
さて、これでAJAXを利用して結果を表示するテーブルを
作れるのだが、「tablesort.js」をどう使うか。
作った最初は、Tableタグの外側でdivを切っておいて「tablesort.js」の
読み込みタグを含む形で送信するRHTMLを書いたが
ソートのリンクが機能しなかった。
結果、一番最初にユーザーに送る段階で列名(th)を定義し、
tbodyの中を差し替えるようにしたところ、ちゃんと動作した。
ということで、「tablesort.js」を使う上でのコツとしては
1、XHTMLのtableを使い、theadに列名を入れておいて事前に
ユーザーに送信しておくこと。
2、formはAJAXを利用して、tbodyに結果を送るようにすること。
になります。
なお、具体的な「tablesort.js」の設定方法はリンクを参考にして下さい。
tablesort.js : リンク
列名でソート出来るように作るにはどうすれば良いか?
パッと考え付くのは、Actionを追加しlink_to_remoteを使って
行なうというくらい。(私の技量の問題はおいておいて。)
ということで、以下の流れをユーザーに提供する手段を探していました。
1、普通のFormを使って、条件を設定し合致するテーブルを生成
2、検索結果をソートする
なお、2のソートの時に通信が発生しない方が私の会社の環境を
考えると良い様に感じました。(海外拠点の回線がかなり細い為。)
そこで見つけたのが「tablesort.js」です。
<使い方>
form_remote_tagを使って、Formを構成する。
検索結果を表示するテーブルをXHTMLで書くこと。
(Rails自体は元々XHTMLを使うことが前提なのですが)
<table>
<thead>
<tr>
<th>No</th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody id="list">
</tbody>
</table>
このように、最初tbodyは空にしておいて、form_remote_tagで
listをupdateするようにする。
つまり、ユーザのForm入力がAJAXの動きでサーバに届き、
サーバのActionで<tr><td>---</td></tr>を送り返せば
tbodyの中に結果が入ってきて表示されるようになる。
(AJAXが使えるようになるまでは、FormとTableを別フレームに切り
検索が実行されてもFormが消えないようにしていたが、
この方法なら部分的に書き換えられるだけなのですっきりする。)
さて、これでAJAXを利用して結果を表示するテーブルを
作れるのだが、「tablesort.js」をどう使うか。
作った最初は、Tableタグの外側でdivを切っておいて「tablesort.js」の
読み込みタグを含む形で送信するRHTMLを書いたが
ソートのリンクが機能しなかった。
結果、一番最初にユーザーに送る段階で列名(th)を定義し、
tbodyの中を差し替えるようにしたところ、ちゃんと動作した。
ということで、「tablesort.js」を使う上でのコツとしては
1、XHTMLのtableを使い、theadに列名を入れておいて事前に
ユーザーに送信しておくこと。
2、formはAJAXを利用して、tbodyに結果を送るようにすること。
になります。
なお、具体的な「tablesort.js」の設定方法はリンクを参考にして下さい。
tablesort.js : リンク
2007年6月19日火曜日
Rails Formまとめ
いつも忘れるので、軽くまとめ。
<基本パターン>
controller
@members = Member.find(:all, :select => "id, name").collect{|m| [m.name, m.id]}
view
<%= select(:members, :id, @members, :include_blank => true) %>
include_blankで先頭に空白を入れられる。
<その他>
こっちにまとめられているので、参照のこと。
<基本パターン>
controller
@members = Member.find(:all, :select => "id, name").collect{|m| [m.name, m.id]}
view
<%= select(:members, :id, @members, :include_blank => true) %>
include_blankで先頭に空白を入れられる。
<その他>
こっちにまとめられているので、参照のこと。
HowtoUseFormOptionHelpers
2007年6月13日水曜日
Emacs Dired
いつも忘れるので、軽くまとめておく。
d 削除マーク
u 削除マーク解除
x 削除マーク実行
# 自動保存ファイルに削除マーク
~ バックアップファイルに削除マーク
f ファイルを今のバッファで開く
o ファイルを別バッファで開く
c コピー
r リネーム
m モード変更
g 表示の更新
s 表示ソート(時刻と名前)
i サブディレクトリの内容を表示する
k サブディレクトリの削除
サブディレクトリの作成って、コマンドでやるのでしょうか?
参考元
GNU Emacs マニュアル
d 削除マーク
u 削除マーク解除
x 削除マーク実行
# 自動保存ファイルに削除マーク
~ バックアップファイルに削除マーク
f ファイルを今のバッファで開く
o ファイルを別バッファで開く
c コピー
r リネーム
m モード変更
g 表示の更新
s 表示ソート(時刻と名前)
i サブディレクトリの内容を表示する
k サブディレクトリの削除
サブディレクトリの作成って、コマンドでやるのでしょうか?
参考元
GNU Emacs マニュアル
2007年6月12日火曜日
仮想PCのディスク作成
VMPlayerを利用してLinuxなどをインストールするために、仮想のディスクを作成する必要があります。
VMPlayerの製造元のページでは、直ぐに使えるディスクイメージを配布していますが、自分で好きなOSをインストールしたい場合は作らないとダメです。
幾つかの方法があり私はVMXBuilderというツールを使っていますが、こちらも良さそうです。
EasyVMX!: Virtual Machine Creator
VMPlayerの製造元のページでは、直ぐに使えるディスクイメージを配布していますが、自分で好きなOSをインストールしたい場合は作らないとダメです。
幾つかの方法があり私はVMXBuilderというツールを使っていますが、こちらも良さそうです。
EasyVMX!: Virtual Machine Creator
2007年6月9日土曜日
emacs-railsまとめ
別の環境を作り、最短ステップでのRails環境構築とEmacs準備をしてみた。
以下にまとめておく。
OS : Ubuntu7.04
インストールされるもの(概要)は以下のとおり。
Ruby1.8.5
Rails1.2.1
gem0.9.0
Emacs22系
<手順>
1、普通にUbuntuをインストールする。
2、インストール後に、Synapticパッケージ・マネージャにてemacs-snapshotをインストール
"emacs-snapshot"で検索をかけて表示されたパッケージを全て。
3、同じく"ruby"で検索をかけて、以下のものをインストール。
eruby irb libruby rails rake rdoc ruby-elisp rubygems
適応を押して追加されるものは、そのままインストールする。
(rubyとruby1.8があるので、一応両方入れました。)
4、インストール後に再起動。
再起動後にメニューを見るとEmacs-snapshotが追加されているので
ちゃんと使えるか確認する。
5、よしだメモを参考に、ほとんど同じことを実行する。
変更点:emacs-railsの最新版にした。(0.5.99.5にしました)
6、日本語入力でAnthyを利用する場合は、
パッケージマネージャでanthy-elをインストールする。
SCIMの設定で、キーボードの「ctrl+space」を外す。
以上にて、Railsの環境とEmacsの設定が終わりです。
まだ完全にテストしていないので、これで良いかは別途検証してみます。
以下にまとめておく。
OS : Ubuntu7.04
インストールされるもの(概要)は以下のとおり。
Ruby1.8.5
Rails1.2.1
gem0.9.0
Emacs22系
<手順>
1、普通にUbuntuをインストールする。
2、インストール後に、Synapticパッケージ・マネージャにてemacs-snapshotをインストール
"emacs-snapshot"で検索をかけて表示されたパッケージを全て。
3、同じく"ruby"で検索をかけて、以下のものをインストール。
eruby irb libruby rails rake rdoc ruby-elisp rubygems
適応を押して追加されるものは、そのままインストールする。
(rubyとruby1.8があるので、一応両方入れました。)
4、インストール後に再起動。
再起動後にメニューを見るとEmacs-snapshotが追加されているので
ちゃんと使えるか確認する。
5、よしだメモを参考に、ほとんど同じことを実行する。
変更点:emacs-railsの最新版にした。(0.5.99.5にしました)
6、日本語入力でAnthyを利用する場合は、
パッケージマネージャでanthy-elをインストールする。
SCIMの設定で、キーボードの「ctrl+space」を外す。
以上にて、Railsの環境とEmacsの設定が終わりです。
まだ完全にテストしていないので、これで良いかは別途検証してみます。
2007年6月8日金曜日
Railsのサーバ
Railsの実行環境メモ
<現在>
Lighttpd : 負荷分散用に使用。proxyを使ってバックを呼び出す。
Mongrel : mongrel_clusterを使って、サイトを複数立ち上げる。
FastCGIを利用するのも良いが、複数サイトを立ち上げる時に
サイト毎のサービス停止が難しい。
そこで、フロントにApache2を使ってもMod_proxyを利用して振り分けを行ないたかったけれども、公開環境にてRPMがまだ提供されていなかった。という経緯から、Lighttpdを使うことに。
(考えてみると、Lighttpdも正式サポートではないので、状況は変わらないんですが。)
<気になる環境>
1、Apache2(mod_proxy) + Mongrel_cluster
最終的にはこの環境がサポート面からも良いかと。
2、JRuby + rails-asyncweb
記事で発見。
将来、Javaのサーバ環境の方が利点が多いと
判断したら切り替えると良いかもしれない。
Railsの技術者がまだまだ少ないが、Javaの技術者は多いので、
開発者によってJavaを使うかRailsを使うかを選んでもらえる方が
会社としては人員確保しやすくて良い気がする。
<現在>
Lighttpd : 負荷分散用に使用。proxyを使ってバックを呼び出す。
Mongrel : mongrel_clusterを使って、サイトを複数立ち上げる。
FastCGIを利用するのも良いが、複数サイトを立ち上げる時に
サイト毎のサービス停止が難しい。
そこで、フロントにApache2を使ってもMod_proxyを利用して振り分けを行ないたかったけれども、公開環境にてRPMがまだ提供されていなかった。という経緯から、Lighttpdを使うことに。
(考えてみると、Lighttpdも正式サポートではないので、状況は変わらないんですが。)
<気になる環境>
1、Apache2(mod_proxy) + Mongrel_cluster
最終的にはこの環境がサポート面からも良いかと。
2、JRuby + rails-asyncweb
記事で発見。
将来、Javaのサーバ環境の方が利点が多いと
判断したら切り替えると良いかもしれない。
Railsの技術者がまだまだ少ないが、Javaの技術者は多いので、
開発者によってJavaを使うかRailsを使うかを選んでもらえる方が
会社としては人員確保しやすくて良い気がする。
英語配列キーボード
英語配列のキーボードが良いと感じた。
日本語配列より、記号の並びが良いし、キートップがすっきりしていて見た目も良い。ということで、前に買っておいたキーボードを設置してUbuntuで利用している。
配列の設定ですが、システム>設定>キーボードでおこなう。
CapsとCtrlの入れ替えも、対応出来るのでConfをいじらなくて良いから楽チン。
なお、はまったのは以下のとおり。
型式: Generic 104-key PC
型式は、幾つかあるうち一番標準的なものを選んでおけば
とりあえずうまく行きそう。
レイアウト: U.S. English
最初、この「U.S.English」という部分がメニュー上選択出来ると
思っていなかったので、その配下のものを選択してたので、”や’が入力出来なくてかなり困った。
ということで、現在は普通に使えています。
日本語配列より、記号の並びが良いし、キートップがすっきりしていて見た目も良い。ということで、前に買っておいたキーボードを設置してUbuntuで利用している。
配列の設定ですが、システム>設定>キーボードでおこなう。
CapsとCtrlの入れ替えも、対応出来るのでConfをいじらなくて良いから楽チン。
なお、はまったのは以下のとおり。
型式: Generic 104-key PC
型式は、幾つかあるうち一番標準的なものを選んでおけば
とりあえずうまく行きそう。
レイアウト: U.S. English
最初、この「U.S.English」という部分がメニュー上選択出来ると
思っていなかったので、その配下のものを選択してたので、”や’が入力出来なくてかなり困った。
ということで、現在は普通に使えています。
開発環境構築
vmplayerにて開発環境を作った。
ホストOS: WindowsXP SP2
ゲストOS: Ubuntu 6.06
VMplayerは最新の2.0を利用。(何が違うかイマイチ解らない。)
やりたいことは以下のとおり。
emacsはemacs-snapshotを利用する。
Emacs21を利用すると、別途UTF8に対応するためのモジュール(?)を入れないとダメなのでEmacs22を入れるほうが良いという結論。だが、Emacs22をコンパイルして入れるとUbuntuのパッケージ管理がもったいない感じ。そこで、ちょっと古いのかもしれないけどsnapshotを選択。
Rubyは1.8.6を使う。
Ubuntuのapt-getで入るRubyはちょっと古い。そこで、1.8.6を入れたいが、こちらもパッケージ管理を生かしておきたい。こちらを読んで、そのまま実行しました。ありがたや。
なお、インストール直後のUbuntuではパッケージが足りないので開発系のものをインストールしておくこと。
開発系(GCCとか)は何を入れるの?というのは、Ubuntuのインストール履歴を公開しているBlogを参考にしましょう。
MySQLは外部のサーバを使う。
私の環境では、MySQLは別サーバを利用しております。WindowsでNavicatというツールを使っているので、PCを2台利用し1台はMySQL用のコンソール状態。もう1台にUbuntoをセットして開発はこちらを行なうという感じです。
なお、ubuntuのインストールはこちらが参考になります。
特にRubyやRailsのバージョンにこだわりがないならば、ここを参考にセットアップするのが一番スムーズに行きます。
Emacsでemacs-railsを使う時のセットアップは、色々と試したのですが、どうも全機能動く環境を作るのが難しいです。MacOSX買っちゃえば楽そうなのですが。。。
調べた範囲では
1、WindowsならMeadowを使う。
これなら、設定済みMeadowを入れれば使える。
ただし、重め。また、私は一部のキー入力がうまく動かなかったです。
2、Snippetsを使いたいだけなら、他のツールを考える。
例えば、IntelliJ IDEAとか。(こちら)
3、Linuxで開発環境作るならDebian系?
ubuntu + emacs-snapshotが一番楽だった。
ホストOS: WindowsXP SP2
ゲストOS: Ubuntu 6.06
VMplayerは最新の2.0を利用。(何が違うかイマイチ解らない。)
やりたいことは以下のとおり。
- emacsを使ってrailsの開発をしたい。
- emacsではemacs-railsを使いたい。
- emacsはUTF8ベースがいい
emacsはemacs-snapshotを利用する。
Emacs21を利用すると、別途UTF8に対応するためのモジュール(?)を入れないとダメなのでEmacs22を入れるほうが良いという結論。だが、Emacs22をコンパイルして入れるとUbuntuのパッケージ管理がもったいない感じ。そこで、ちょっと古いのかもしれないけどsnapshotを選択。
Rubyは1.8.6を使う。
Ubuntuのapt-getで入るRubyはちょっと古い。そこで、1.8.6を入れたいが、こちらもパッケージ管理を生かしておきたい。こちらを読んで、そのまま実行しました。ありがたや。
なお、インストール直後のUbuntuではパッケージが足りないので開発系のものをインストールしておくこと。
開発系(GCCとか)は何を入れるの?というのは、Ubuntuのインストール履歴を公開しているBlogを参考にしましょう。
MySQLは外部のサーバを使う。
私の環境では、MySQLは別サーバを利用しております。WindowsでNavicatというツールを使っているので、PCを2台利用し1台はMySQL用のコンソール状態。もう1台にUbuntoをセットして開発はこちらを行なうという感じです。
なお、ubuntuのインストールはこちらが参考になります。
特にRubyやRailsのバージョンにこだわりがないならば、ここを参考にセットアップするのが一番スムーズに行きます。
Emacsでemacs-railsを使う時のセットアップは、色々と試したのですが、どうも全機能動く環境を作るのが難しいです。MacOSX買っちゃえば楽そうなのですが。。。
調べた範囲では
1、WindowsならMeadowを使う。
これなら、設定済みMeadowを入れれば使える。
ただし、重め。また、私は一部のキー入力がうまく動かなかったです。
2、Snippetsを使いたいだけなら、他のツールを考える。
例えば、IntelliJ IDEAとか。(こちら)
3、Linuxで開発環境作るならDebian系?
ubuntu + emacs-snapshotが一番楽だった。
登録:
投稿 (Atom)