• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
 

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/177

今回のバージョンアップの主題は、コネクション切断検出の改善とバグフィックスです。

とくに、Safariユーザにとっては、非常に重要なバグ修正を含んでいます(Safariの特殊な挙動に対する一種のワークアラウンドです)

http://rubyforge.org/projects/shooting-star/

ChangeLog:

  • 2 major enhancements:
    • meteor/strikeのレンダリング結果をキャッシュするようにした
    • ソケット読込時のエラーおよび切断検出を改善した
  • 5 minor enhancements:
    • ブラウザの「戻る」を押したときに、キャッシュされてしまう問題を解決
    • meteor_helperを追加(中身は空ですが)
    • Safariでiframeのonloadが効かない問題に対処
    • それに関連して、configurationに'sweep_timeout'の項目を追加
    • 切断検出のために'session_timeout'の設定項目を追加
  • 3 minor bugfixes:
    • MacOSのブラウザ群におけるキャッシュの扱いの問題への対処.
    • 特にSafariの「戻る」時の奇妙な振る舞い(formのポスト)への対処
    • クライアントの接続管理の改善

[English]

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/177

posted by Png genki on Fri 30 Mar 2007 at 00:15

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/176

Webアプリケーションを開発するときは、動作確認のためにローカルでWebサーバを立ち上げることになります。Railsアプリケーションでは、デフォルトでWebrickを使うようになっています
(mongrelをインストールしている場合は、デフォルトでmongrelを使うようになっています。また、lighttpdがインストールされている場合もデフォルトでlighttpdを使うようになります。)

WebrickはRubyに標準でついてくるし、使い方も大変簡単で便利なのですが、本番環境ではLighttpdやApacheを使うことが多いので、動作確認でもLighttpdを使いたくなったりします。

というわけで、Lighttpdを使って開発を行うときのポイントをメモしておきます。

(1) lighttpdコマンドにPATHを通す
lighttpdをインストールしたら、lighttpdのコマンドにPATHを通しておきます。Debianの場合、/usr/local/sbin/lighttpdあたりにあります(ソースからインストールした場合)
ちなみに、現時点ではlighttpd-1.5.0系のバージョンは設定ファイルの書き方などが1.4.0系とはだいぶ変わっていて、Railsが追従できていないので、1.4.0系の最新版を使うことをお勧めします。

(2) Webサーバは起動しっぱなしで使用する
まず、以下のコマンドで起動します。

$ ./script/server lighttpd

最初に起動したときに、config/lighttpd.confファイルの雛形が生成されるので、一旦Ctrl+Cでサーバを停止して設定ファイルを適宜書き換えます。そして再び、今度は-dオプションをつけて起動します。

$ ./script/server -d

二度目以降はlighttpdを指定しなくても自動的にlighttpdが起動します。(逆に、webrickを使いたい場合は明示的にwebrickを指定する必要があります)

(3) プラグインの書き換え等を行ったら、fcgiプロセスを再起動
プラグインのように自動リロードされないコードを編集したときは、以下のコマンドでfcgiプロセスを起動しなおします。

$ ./script/process/reaper -a graceful

次回ブラウザからアクセスされたタイミングで、プロセスが再起動し、プラグインなどの修正箇所が反映されます。

(4) logger.debugを使ってデバッグ

-dオプションをつけてWebサーバを起動すると、pの出力が画面に出なくなるので、かわりにlogger.debugを使います。詳細は「Railsでデバッグをする7つの方法」を参考にしていただければ。

(5) Webサーバの停止の仕方
以下でOK.

$ kill `cat tmp/pids/lighttpd.pid`

大体こんな感じでしょうか。

Enjoy!

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/176

posted by Png genki on Wed 28 Mar 2007 at 10:21

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/175

Cometサーバ ShootingStar-1.0.3をリリースしました。
http://rubyforge.org/projects/shooting-star/

以下のコマンドでインストールできます。
$ sudo gem install shooting_star

主な機能:
- Cometサーバ
- Cometクライアント(Rails Pluginとして)

本リリースは、ShootingStarの最初のパブリックリリースになります。

リポジトリのtrunkがそのままサンプルRailsアプリケーションになっています。
以下の手順でチェックアウト可能です。

$ svn co svn://rubyforge.org/var/svn/shooting-star/trunk shooting_star

詳細については、同梱のREADME.txtをご覧ください。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/175

posted by Png genki on Fri 23 Mar 2007 at 06:05

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/174

Railsのレイアウトの仕組みは、レイアウトを明示的に指定しない場合は、fooコントローラに対してapp/views/layouts/foo.rhmltが存在する場合はfoo.rhtmlをレイアウトと見なし、存在しない場合はapp/views/layouts/application.rhtmlをレイアウトとして使用するようになっています。 両方とも存在しない場合はレイアウト無しと見なされます。

これを、foo.rhtmlをレイアウトとして使用しつつ、さらにその外側のレイアウトとしてapplication.rhtmlを使用するようにするには、コントローラに以下のようなafter_filter を追加すればOKです。

class FooController < ApplicationController
  after_filter :wrapping_output_with_application_layout

private
  def wrapping_output_with_application_layout
    return true if @performed_redirect
    content_for_layout = response.body
    erase_render_results
    add_variables_to_assigns
    @template.instance_variable_set("@content_for_layout", content_for_layout)
    render_text(@template.render_file('layouts/application', true))
  end
end
コントローラ毎のレイアウトの共通部分をさらに括り出したい場合に便利です。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/174

posted by Png genki on Tue 20 Mar 2007 at 16:56

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/173

Ruby拡張のドキュメントの書き方がさっぱりわからなくて困った。 こんな感じの警告が出るんですよね。

Installing ri documentation for shooting_star-1.0.2...

No definition for asteroid_s_run

No definition for asteroid_s_stop

No definition for asteroid_server_send_data
どこかに書かれてるのかなあ・・・。と、いろいろ調査した結果、Rakefileの中で以下のように書けばOKでした。
Hoe.new('shooting_star', ShootingStar::VERSION) do |hoe|
  ...
  hoe.spec_extras = {
    :extensions => 'ext/extconf.rb',
    :rdoc_options => ['--exclude', 'ext/asteroid']
  }
  ...
end
Ruby拡張について無視させている感じですね。まあ、直接呼び出されることは無いから良いか・・・。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/173

posted by Png genki on Tue 20 Mar 2007 at 10:49

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/171

RubyForgeでCometサーバの開発プロジェクトを開始しました。
http://rubyforge.org/projects/shooting-star/

1台のサーバあたり、同時10万コネクション以上を実現する実用的なCometサーバの開発を目的としています。

現在のところ、epollおよびkqueueを使って実装したバージョンを、このブログのChatで使用しています。来週中を目処に、アルファバージョンをリリースする予定です。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/171

posted by Png genki on Sun 18 Mar 2007 at 05:33

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/170

Cometサーバのコネクション数の実験のために、ブログにChatを設置してみました。

Chatの本体はこちら(http://developer.drecom.jp/)にあります。

【追記】
XSS脆弱性が見つかりました。ご指摘くださいましてどうもありがとうございます。
現在は修正されています。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/170

posted by Png genki on Wed 14 Mar 2007 at 12:20

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/169

メモ。

集中力は、どんな仕事であれ、いい仕事をするためには必須の能力だと思う。

プログラマーに必要な集中力は、スポーツ選手のような数分から1時間の短時間の深い集中力ではなくて、例えば外科医が手術中に発揮する、十数時間に及ぶような、持続的な集中力だなあと思う。

多分、短期間にすごい量の仕事をする人たちは、持続的な集中力を持っている。
彼らは集中力を発揮するのにTPOを選ばない。
その姿は、ともすれば変人に見えるかもしれない。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/169

posted by Png genki on Sun 11 Mar 2007 at 14:57
undefined method `<<' for nil:NilClass
posted by Png genki on Thu 8 Mar 2007 at 20:33

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/167

以下は、rb_iterateを使ってHashをiterateするコードです。

static VALUE iterator_proc(VALUE Pair, VALUE Arg, VALUE Self){
  VALUE Key = RARRAY(Pair)->ptr[0];
  VALUE Value = RARRAY(Pair)->ptr[1];
  return Qnil;
}

rb_iterate(rb_each, Hash, iterator_proc, Arg);

HashはiterateされるべきHash、 Argはイテレータ・ブロック関数に渡される任意のVALUEです。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/167

posted by Png genki on Tue 6 Mar 2007 at 10:10