とりあえずな対応ですが・・・・

使ってる環境がruby1.9.2trunkとrails3.0betaなんですが、残念ながらredmineはrails2.3.5とruby1.8.xでしか動かない。

とりあえず動かしてみたところ、基本的にひっかかるのは文字コード周りであることがわかったためちょっと修正してみたらだいたい動く感じになりました。

ポイントは

  • gitを使う
  • rails2.3.5をvendor/railsに入れる
  • Stringを拡張する
  • Encoding.external_encodingをUTF-8にする
  • postやgetの値paramsを全部force_encoding("UTF-8")する

です。

gitを使う

redmineを直接いじるのでバージョン管理する方がおすすめです。

git clone http://github.com/edavis10/redmine.git

このgitリポジトリはofficialミラーだそうです。

rails2.3.5をvendor/railsに入れる

git submoduleが便利です。

git submodule add http://github.com/rails/rails.git ./vendor/rails

そして、railsの中身をv2.3.5にします。

cd vendor/rails/
git checkout -b v235 v2.3.5

これでok。

Stringを拡張する

String.eachが1.9では無くなっています。代わりにeach_lineを使えばいいんですが、全部書き換えるのが面倒なので、config/environment.rbに書いちゃいます。

config/environment.rb

CODE:
  1. class String
  2. def each(*args)
  3. self.each_line(*args)
  4. end
  5. end

class String
def each(*args)
self.each_line(*args)
end
end

Encoding.external_encodingをUTF-8にする

いらないかもしれない。config/environment.rbに書き込みます。

config/environment.rb

Encoding.default_external = "UTF-8"
postやgetの値paramsを全部force_encoding("UTF-8")する
ここ一番きもです。app/controllers/application.rbにparams全部にutf8を設定します。

app/controllers/application_controller.rb

CODE:
  1. before_filter :params_filter
  2.  
  3. def params_filter
  4. self.utf8nize(params)
  5.  
  6. end
  7.  
  8. def utf8nize(obj)
  9. if obj.is_a? String
  10. obj.force_encoding("UTF-8")
  11. elsif obj.is_a? Hash
  12. obj.each {|key, val|
  13. obj[key] = self.utf8nize(val)
  14. }
  15. elsif obj.is_a? Array
  16. obj.map {|val| self.utf8nize(val)}
  17. else
  18. obj
  19. end
  20. end

だいたいこんな感じでruby1.9でもredmineが動くようになりました。

とりあえず動かないところ見つける度に直してるのであまり網羅的ではないかも。

一応githubでコードは晒してあります