Linux-Java-Memo.com

金曜日 11 26, 2010

メモ: railsでのセッション管理について

railsでは2.0以降、セッションはデフォルトでcookie内にすべて格納するらしい。
これだと4kバイトの容量制限はあるが、セッションタイムアウトとか、負荷分散時のセッション情報の共有とか気にしなくてよい。
DBストアも選択出来る。これだと容量制限も気にしなくてよくなる。性能はどうなんだろうか。

月曜日 11 15, 2010

rails 3 メモ: productionのサーバでpublicが見えない

WEB+DB PRESS Vol.58より抜粋

Rails 3では、rails sコマンドでproduction環境のサーバを起動すると、public以下のファイルやディレクトリがサーバによって提供されなくなっている。config/environments/production.rbのconfig.serve_static_assetsをtrueにすることで解決する。
Passenger経由であれば、staticなファイルはApache等が提供してくれる部分なので問題なし。

火曜日 11 02, 2010

rails 注意事項いろいろ

  • アプリケーション名とモデル名はダブるとエラー?
  • アプリケーション名に_testとか入れると、TestUnitのクラス名と衝突してエラーとなる。

rails 3 で mysqlを使ってみる

Ubuntu 9.10環境でrails3お試し中。mysqlにつないでみる。

rails new hoge --database=mysql

config/database.ymlをみると、gem install mysql2でdriverを入れろと書いてあるが、そのまま実行するとエラーとなる。 libmysqlclient15-dev パッケージが必要(Ubuntu 9.10の場合)。

aptitude install libmysqlclient15-dev
sudo gem1.8 install mysql2

今度はうまくいった。

database.ymlでencoding: eucjpmsにしてみる。→ 画面表示で文字化け発生。ActiveRecord::Baseの説明に従い、文字化けするカラムのaccessorをオーバーライトして文字変換させたところうまく動いた。

水曜日 10 27, 2010

Ruby on Rails 3

WEB+DB PRESS Vol.58 を買い、Rails 3勉強中。久しぶりに新しいもんを学んでます。

Ajax化が簡単に出来るのはすごいんだけど、データとして返ってくるJavaScriptコードがバグっててもなんのエラー表示もされないな。デバッグ厳しそう。

例えば test.js.erb とかに

$('posts').update(
  '<%= escape_javascript(render @posts) %>'
);

とか書くのだけど、ここにバグがあっても、動かないだけで、どこが悪いのかよくわかりません。

Railsなら、ここにそんなに複雑なコードを書くことは無い、ってことなのかな。


2010.11.02 追記。

なるほど。RJSを使えってことですね。

木曜日 5 20, 2010

RubyでXML処理するにはLibXML-Rubyが良い

RubyでXML処理するにはREXMLが簡単そうでいいかと思っていたのだが(標準で組み込まれているし)、なぜか外部エンティティを読み込んでくれないみたい。調べてみたが対応していないようでよくわからなかった。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hoge SYSTEM "hoge.dtd">
.... <!-- REXMLだと、hoge.dtdに記載してある情報を反映してくれない -->


仕方がないのでREXMLはあきらめて、LibXML-Rubyを使ってみた。こちらもデフォルトでは外部エンティティを読み込んでくれないが、API Docsから辿っていくとXML::Parser::Optionsで指定すれば読み込んでくれることがわかった。

doc = XML::Document.file( "hoge.xml", :options => XML::Parser::Options::NOENT|XML::Parser::Options::DTDLOAD );
このように指定すればちゃんと外部エンティティを読み込んでくれました。XPath指定など機能的にもREXMLを同じような感じで使いやすくて良いです。

月曜日 5 11, 2009

Debian/lennyで Rubyの Amrita2を動かす

  • 現時点でのAmrita2の最新版は2.0.2だが、仕様が大きく変わっており、修正困難だったため、元々利用している1.9.6を動作させた。
  • 更に現時点でAmrita2のWebサイトにはアクセス出来なくなっている。2.0.2はRubyForgeからダウンロードした。

  • Amrita2が呼んでいるREXMLライブラリがアップデートされており、Amrita2 1.9.6だと
    REXML::Text.write is deprecated.  See REXML::Formatters

と警告出力される。

  • deprecateされた為か、REXMLのelement.rbにバグがあるので修正必要。修正箇所は以下。
    *** element.rb.orig     
    --- element.rb
    ***************
    *** 671,677 ****
    # out = ''
    # doc.write( out ) #-> doc is written to the string 'out'
    # doc.write( $stdout ) #-> doc written to the console
    ! def write(writer=$stdout, indent=-1, transitive=false, ie_hack=false)
    Kernel.warn("#{self.class.name}.write is deprecated. See REXML::Formatters")
    formatter = if indent > -1
    if transitive
    --- 671,677 ----
    # out = ''
    # doc.write( out ) #-> doc is written to the string 'out'
    # doc.write( $stdout ) #-> doc written to the console
    ! def write(output=$stdout, indent=-1, transitive=false, ie_hack=false)
    Kernel.warn("#{self.class.name}.write is deprecated. See REXML::Formatters")
    formatter = if indent > -1
    if transitive

参照サイト http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/32141

  • amrita:typeオプションを指定すると、例外が発生するようになった。
    Undefined prefix amrita found (REXML::UndefinedNamespaceException)

これは、htmlタグにxmlns:amrita=http://../ でnamespaceを定義してみたところ解決。

金曜日 4 24, 2009

JRubyメモ

JRubyを使ってみた。簡単にJavaと連携できて便利なのかなと考えていたが、ライブラリの問題や、日本語、JDBC接続など、いろいろ癖があるみたい。

・ JRuby1.0だと-Kオプションで文字コードを指定出来ない。JRuby1.1以上?なら対応している様子。
・ uconv等、ネイティブのライブラリは使えない。→ uconvは、rbuconvという、rubyで書かれた互換ライブラリがあるので代用すればok
・ 同様にDBIのmysqlとかのドライバも使えない。http://wiki.jruby.org/wiki/JDBCに記載されている、jdbc/mysqlを利用するか、JRuby専用のDBI-jdbcドライバがあるのでそれを使う。
・ JRuby自体?とJRubyから呼ばれるJavaプログラムの利用するクラスローダーは異なる様子。

# CLASSPATHに指定
test = hoge.Hoge.new; # OK
Class.forName("hoge.Hoge") # NG
# JRUBY_CPに指定すれば、OKになった。

 

Calendar

tags

Feeds

Search

Links