Linux-Java-Memo.com
メモ: railsでのセッション管理について
railsでは2.0以降、セッションはデフォルトでcookie内にすべて格納するらしい。
これだと4kバイトの容量制限はあるが、セッションタイムアウトとか、負荷分散時のセッション情報の共有とか気にしなくてよい。
DBストアも選択出来る。これだと容量制限も気にしなくてよくなる。性能はどうなんだろうか。
Posted at 01:30午後 11 26, 2010 by pochi in Ruby |
rails 3 メモ: productionのサーバでpublicが見えない
Rails 3では、rails sコマンドでproduction環境のサーバを起動すると、public以下のファイルやディレクトリがサーバによって提供されなくなっている。config/environments/production.rbのconfig.serve_static_assetsをtrueにすることで解決する。
Passenger経由であれば、staticなファイルはApache等が提供してくれる部分なので問題なし。
Posted at 05:28午後 11 15, 2010 by pochi in Ruby |
rails 注意事項いろいろ
- アプリケーション名とモデル名はダブるとエラー?
- アプリケーション名に_testとか入れると、TestUnitのクラス名と衝突してエラーとなる。
Posted at 07:02午後 11 02, 2010 by pochi in Ruby |
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をオーバーライトして文字変換させたところうまく動いた。
Posted at 05:46午後 11 02, 2010 by pochi in Ruby |
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を使えってことですね。
Posted at 05:49午後 10 27, 2010 by pochi in Ruby |
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を同じような感じで使いやすくて良いです。
Posted at 07:30午後 5 20, 2010 by pochi in Ruby |
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を定義してみたところ解決。
Posted at 05:16午後 5 11, 2009 by pochi in Ruby |
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になった。
Posted at 01:50午後 4 24, 2009 by pochi in General |