Nasuta<http://www.nasuta.jp/>

2007年05月04日

Jruby On Rails + Derby(組み込み編)

以前にderbyをスタンドアローンで起動させてJrubyOnRailsから呼び出してみましたが、今回は組み込みモードに挑戦です。

いままでnasutaはsqlite3 を使っていましたので同じ組み込みモードで使えると何かとうれしいので。ということでsqlite3にあったスキーマをDerby(組み込みモード)へ移行してみました。


derby.jarをコピー
組み込みモードで使う場合はderbyのJDBCドライバではなくDerbyDBそのものが必要になります。(当たり前ですが)よって、jrubyのインストールディレクトリにある lib/ ディレクトリにderby.jarをコピーします。

config/database.yml
development:
adapter: jdbc
driver: org.apache.derby.jdbc.EmbeddedDriver
url: jdbc:derby:db/derby_dev;create=true


urlで 相対パスでderbyのデーターベースを記述していますが、この後rakeでスキーマを移動するときにアプリのホームにあるdb/ディレクトリにDerbyのデータベース derby_dev が作成されます。続きを読む
posted by ふんじ at 18:50| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2007年04月29日

Jruby on Rails + Pure Java SQLite JDBC driver

いままではJNIをを使ったドライバしか無かったためにMacOS Xでは使いずらかったSQLite JDBCドライバですが、Pure Java のドライバで公開されていました。すばらしい!

http://www.zentus.com/sqlitejdbc/

ということで、Jruby On Railsで使えないかと試してみたんですが、ActiveRecord-JDBCが対応していませんでした。。。orz

Jrubyからsqliteが使えることが確認できただけに残念。

posted by ふんじ at 04:11| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年12月12日

CLARAのVPSでmongrelが再起動せず

落ちていたのでmongrel cluster を再起動するも起動せず。
ログを調べてみたらメモリーアロケートに失敗していました。

cluster といっても二つしかプロセス立ち上げていないしいままでは起動できたんですがね。。VPSへのメモリアロケートを減らしたんでしょうか。

仕方ないのでとりあえずwebrick 一つで立ち上げています。

webrick のプロセスをtop で見ると26MB ほどのサイズ。fast-cgiでもそれほどサイズは変わらなかったと思います。

となるとVPSではどの方法をつかっても1プロセスしか起動できないということか?厳しい。。。
posted by ふんじ at 07:21| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年12月05日

SQLite3::SQLException (SQL logic error or missing database)

HTTP監視からエラーがきてなかったのでずっと気がつきませんでしたが、http://www.nasuta.jp/がずっとインターナルエラーを返す状況になっていました。

ログを見たらかなりたくさんの下記のエラーが。
SQLite3::SQLException (SQL logic error or missing database)

ん。。。SQLiteはネットワーク通信もなくシンプルなのでトラブらないと
おもってたんですが。。MySQLに代えたほうが良いか。。


posted by ふんじ at 18:34| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年11月17日

ruby on rails on coLinux

(ほかのBlogに乗せてたんですが、こっちのほうが合ってるので転載します。)

coLinux 環境上で ruby on Rails の環境を構築を行いましたが結構はまりました。が、これで快適に開発ができそう。

coLinuxへのアクセスはcygwin のXサーバ経由はVNC経由というのがネットでよく見かけますが、面倒なので、ssh 経由のみでやってます。 screen とか入れればさらに快適になりそうです。
続きを読む
posted by ふんじ at 14:11| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年10月30日

ログイン手続きが無いサイトでのSession Fixation攻撃

高木浩光@自宅の日記のログイン前Session Fixationをどうするか

ですが、ログインしなくても変えるショッピングサイトがこれに該当するとおもいますし自分もそういうサイトで何度か購入しています。

ログインが必要なサイトよりチェックや遷移を綿密に考えないといけないのでログインしないサイトよりセキュアに構築するには難易度が高くなりそうです。
posted by ふんじ at 15:01| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年10月15日

cookieで掲示板の名前とE-Mailを保存

でも公開している掲示板にひっそりと要望が書いてあったんで対応してみました。
入力した名前と電子メールアドレスを30日間保存します。
書き込みを保存するメソッドで以下のように名前とクッキーを保存します。

cookies[:nasuta_bbs_post_name] = {
:value => params[:bbs_post][:name],
:expires => 30.days.from_now
}
cookies[:nasuta_bbs_post_email] = {
:value => params[:bbs_post][:email],
:expires => 30.days.from_now
}


フォームを表示するときにクッキーから値を取り出してメンバー変数にセット。Viewではメンバー変数の表示を行います。

     
# Set CookieValue
@bbs_post_name = cookies[:nasuta_bbs_post_name] ||= "匿名"
@bbs_post_email = cookies[:nasuta_bbs_post_email];
posted by ふんじ at 18:44| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年10月14日

QRコードの生成に成功

以前に文字コードの問題でQRコードの生成に失敗(参照:QRコードの生成について)したのですが、RailsでQRコードを生成するからトラックバックで教えて頂いた通りにやってみたらスムーズにできました。

すばらしい!&トラックバックに感謝。
posted by ふんじ at 17:27| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年10月07日

ページネーションとフラグメントキャッシュ

ページネーションを使っているページ(controller => bbs,action => show)にフラグメントキャッシュを適応するとページネーションが正常に動作しません。
どうも、キャッシュの失効がうまく行っていないようです。

仕方ないので、キャッシュを使わないように変更しました。
posted by ふんじ at 18:14| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年09月28日

pound + mongrel でも落ちました。

フリーの監視サービスからアラートメールが来たので調べてみたら、
mongrelが落ちてました。

うーむ。。安定性はまだいまいちなのか。メモリリークがあって確保できなくなって落ちたか。VPSで動いているのでメモリは厳しいのだが。

日々のメモリ監視もやら無いとだめかな?どうやってやろうか。。
posted by ふんじ at 20:27| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年09月11日

ちょっとしたSEO対策

googleで"site:www.nasuta.jp"を調べてみると、"Nasuta - 掲示板"というタイトルがたくさんリストアップされたので、掲示板の<title>にちゃんと題名を入れるように修正しました。

コントローラで

@title = @bbs.title

とかやって、レイアウトに

<% if @title != nil %>
<title><%= @title %></title>
<% else %>
<title>Nasuta - 掲示板</title>
<% end %>

と記述します。
posted by ふんじ at 19:49| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年09月03日

bbs/show/* キャッシュのバグ修正

前のエントリ
でlighttpd+fastcgiで書き込み不能になると書きましたが、
どうやらキャッシュの設定方法にバグがあったようです。

FORMまでキャッシュさせるようにしてしまっていたため、セッション情報がキャッシュされてしまっており、CSRF対策のコードでガードがかかっていました。はずかしい。。

フラグメントキャッシュでFORMをはずしてキャッシュかさせることで正常に動作するようになりました。

lighttpd+fastcgiに戻しても良いのですが、再起動が楽なのでしばらくpound+mongrelで運用してみたいと思います。
posted by ふんじ at 16:19| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

pound + mongrel で負荷分散

lighttpd + fastcgi の構成だとバージョンアップ直後には動かなかったのがしばらくしたら正常に動くようになるなどの不審な挙動が良く起きるので、pound+mongrelの構成に代えてみました。

参考にしたサイト:
http://d.hatena.ne.jp/akm/20060829

poundではopensslが必要なのですが、vps環境でopensslのヘッダが無かったためopensslからインストールしなくてはならなかったのが面倒でしたが、それ以外はコンパイル、インストールも簡単に終わりました。

mongrel_clusterは再起動がfastcgiより簡単で扱いやすいですね。

メモリの使用量はlighttpd+fastcgiとほぼ変わらず。スピードはlighttpd+fastcgi のほうが高速です。vpsのような非力な環境だと負荷が少なくても体感できます。

実行速度を考えるとlighttpdも捨てがたいですが、しばらくはテストがてらこれで動かして見ようと思います。


posted by ふんじ at 10:00| Comment(0) | TrackBack(1) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年09月02日

本番環境で投稿できない

http://www.nasuta.jp/bbs/cloud

は本番環境としてrailsを起動しているんですが、それだと掲示板に投稿できない状況になっていました。

開発環境のwebrickでは再現しないのですが、なぜだ。。lighttpd + fastcgiだとうまく行きません。

仕方ないのでいったん、CSRF対策のガードを外して投稿できるようにしました。

開発環境もlighttpdにすべきなのかなあ。
posted by ふんじ at 22:19| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年08月31日

掲示板Cloudを追加

掲示板を組み込んでみました。Tag CloudっぽいI/Fにしてみました。

概要

  • 2chのように新しい投稿があった板が先に表示される
  • 投稿数が多い板ほどタイトルを大きく表示する
  • 板の追加、削除、編集はNasutaに登録済みのユーザのみ可能


URL:
http://www.nasuta.jp/bbs/cloud

SVN:
svn://www.nasuta.jp/nasuta/tags/snapshot-20060831
posted by ふんじ at 22:37| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

キャッシュの失効がうまく行かない原因

expire_fragment(:action => 'show') のような書き方がいろいろなところで説明されていますが、キャッシュはURLに完全一致なので、"http://hogehoge/controller/show"は失効しますが、"http://hogehoge/controller/show/1" となる場合は消えません。

かなり悩みましたが、正規表現渡しで指定すれば良いようです。


expire_fragment(%r{/controller/show/#{params[:id]}.*})

みたいな感じでしょうか。

でも、read_fragmentはURL一致の渡し方ができないみたいなんですよね。。。
中途半端だなあ。。
posted by ふんじ at 22:29| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年08月30日

paginate と組み合わせて最新が最初に表示されるようにしてみる

paginateは非常に便利なんですが、掲示板の投稿一覧を表示する場合にはページ分割しつつも、最初の表示は最新の投稿をだしたかったりします。

最初は最新の投稿が表示されるようにするのは簡単なのですが、一緒にpaginateを使うと最初の"1"ページ目がクリックできない状態で表示されてしまいます。
(pagination_links() を使った場合)

いい方法が見つからなかったので、「最新表示」,「最初」を表示するリンクを付けて「最初」がクリックされた場合のみpaginate をコールするようにします。
苦肉の策ですがこれで違和感無くページ移動の操作ができるようになりました。

こんな感じ。

per_page = 20
if params[:page] == 'all' ||params[:page] == nil
@posts = @bbs.bbs_posts
unles params[:page]
@posts = @posts[(@posts.length - per_page),per_page]
end
else
conditions = 'bbs_id = ?' ,params[:id]
@show_pages,@posts = paginate :bbs_posts,:per_page =>per_page,:conditions => conditions ,:order => 'post_id'
end
posted by ふんじ at 21:08| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年08月24日

updated_at が便利なはずだったんだが。。

簡単な掲示板を追加してるんですが、下記のようなコードで簡単に投稿を追加することができます。が、Bbs モデルにはupdated_atとbbs_posts_countが定義してあって、 <<でpostが追加されたタイミングでbbs_posts_countが更新されるわけです。本来ならここでupdated_at も更新されて欲しいのですが、実際には更新されないです。魅力半減。


bbs = Bbs.find(params[:bbs][:id])
post = BbsPost.new(params[:bbs_post])
bbs.bbs_posts<<post


仕方ないのでtransaction で囲んで明示的にupdated_at を更新させてます。

bbs = Bbs.find(params[:bbs][:id])
Bbs.transaction do
bbs.update_attribute(:updated_at,Time.now)

post = BbsPost.new(params[:bbs_post])
post.poster = id
bbs.bbs_posts<<post
end

updateを先にしないと、postを追加した後でupdateするとメモリに残っているbbs_posts_countの値(カウントアップされる前)で上書きされるので注意。
#なぜにメモリ上の値もカウントアップしないんじゃい。
#結構、機能が多すぎて仕様が破綻しかけている気もしないではない。
posted by ふんじ at 21:57| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年08月12日

amazonから書籍情報を取得

本のウイッシュリストを管理したかったので、タイトルに"books 書籍名"という感じで最初にbooks と入力し、スペースをあけて書籍名を入力することによってamazon の書籍情報を本文に追加できるようにした。


Ruby/amazon ライブラリを用いた。

参考にしたURL:
与太郎プログラマの日記
http://d.hatena.ne.jp/yotaropg/20060610
posted by ふんじ at 17:26| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2006年08月11日

appletを埋め込んだトップページ表示の高速化

QRコードを表示させるためにAppletをトップページに埋め込んだら表示されるまでに時間がかかるようになったので、ページを読み込んでからappletが起動されるようにしてみた。

<script type="text/javascript"><!--
window.onload = qrcode;
function qrcode() {
var applet_code = '<applet code="com.ubicast.applet.QrApplet.class" codebase="applet" archive="QRapplet.jar" width=90 height=90>'
applet_code += '<param name="url" value="http://www.nasuta.jp/user/login_form">'
applet_code += "\n"
applet_code += '</applet>'

document.getElementById("qrcode").innerHTML = applet_code;
}
//--></script>


appletが表示されているエリアを<div id="qrcode"></div>で囲み、appletタグを削除。
これをheadタグの中に埋め込んだらHTMLが表示された後にappletが起動されるようになった。

説明を読むより、top.htmlのソースを見た方が手っ取り早かったり。
posted by ふんじ at 18:56| Comment(0) | TrackBack(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は90日以上新しい記事の投稿がないブログに表示されております。