2011-12-06

チケットが消えちゃう??

Redmine Advent Calendar jp 2011 の6日目を担当させていただきます、宜しくおねがいします!

それまで使っていたRedmine0.9.xから、なんとか1.2.1までバージョンを上げて半月ほど。
Apache + Passengerという環境から、nginx + unicornに実行環境を変えたため、リソース面でのtry & errorはあったものの、なんとか大きな不具合もなく動いてくれているようです。(移行の顛末は、何かで発表したいなあと思います

今回は、そんなバージョンアップ作業中に遭遇した出来事について書かせていただきます。

* * *

ユーザさんにお願いして、切替え予定機上で、1.2.1での動作確認や機能の違いをチェックしてもらっていた時のこと。

「たかのさん、チケットが消えちゃうんです!」※akiko_pusuのことです。

バージョンアップの予定は明後日に迫っています。

プラグインやカスタマイズした部分の動作確認が済んで、データのインポートとMigrationの工程もJenkinsを使って準備OKになっていた時期です。しかも、退社直前だったので、『あー、お迎えに送れちゃう!!』と思いながら、届け出てくれたユーザさんと一緒に現象を確認すると…。

チケットが削除されちゃう、という不具合ではないのですが、「IE8でチケット一覧からチケットのリンクを選択したら、チケットが表示されなくなってしまう」という症状。

私はIE9を利用していたんですが、言われたとおりにしてみると、確かに再現します。

1. どんな状況で起こるの?

  • IE (8 and 9) を利用している。
  • チケット一覧やロードマップなど、リンク付きのチケット一覧+コンテキストメニュー(右クリック)が利用できる箇所。
  • CSSの .hascontextmenu { cursor: context-menu; } が指定されている範囲にあるセル (<td></tyd>)

2. 再現方法は?

  • チケット一覧 or ロードマップ一覧を表示。
  • チケットの列のうちのどれか一項目を、Drag&Dropで選択する。(文字列のコピーを行う時のように、Drag&Dropで選択します)
  • 選択した後、いったんマウスのボタンを離して選択解除する。
  • 選択した部分の文字列が消えてしまう。
  • HTML的なソースは変わらないが、画面からは見えなくなってしまう & 文字があった場所はブランクになって選択できない。

チケット一覧では<td></td>に挟まれたセル単位で消えてしまいますが、ロードマップの場合はチケットの行そのものを「選択 –> 選択解除」すると、1行分丸ごと見えなくなってしまいます。
下記は、ロードマップでの例です。(Redmine本家です)

context

CSSの、.hascontextmenu { cursor: context-menu; } のスタイルが適用されている箇所では、右側に小さいコンテキストメニューを示すアイコンがくっついたカーソルが表示されます。
次に、Copy&Pasteの要領で、コンテキストメニューが有効な範囲にある項目を選択します。

context-2

選択して、すぐに解除すると、選択した範囲の文字が消えてしまいます!

context-3

ロードマップの場合は、列ごと消せました。
地道に遊んでみると、全部消せちゃったりします…。

context-4

Redmineはずーっと使っているし、IE中心の生活だったのですが、これには全く気が付いていませんでした。発見した方、凄い~と思ってしまいました!(もしかして、もうみなさんご存じだったかな…)

「インストールしたプラグインや、表示のテーマ、あるいはカスタマイズした部分のせい?」と思い、素のRedmineや、Redmine.org(本家)、お世話になっている r-labs さまのところでも試してみたのですが、やっぱり再現。

実際にチケットが削除されるわけではなく、表示されなくなってしまうというもののため、不具合というよりは、IEの問題だろうということで、ひとまず発見した方、関係者の間で閉じておきました(^^;

私はCSSには詳しくないので、理由が判る方がいらしたら、ぜひフィードバックをお願いいたします!

さすがにこんな内容ではTipsにならずに申し訳ないので、Redmineのパスワードのリセット方法を紹介します。

* * *

Adminのパスワードが分からなくてログインできない!

adminアカウントでログインしたいんだけど、パスワード何だったかなあ…。
移行の際にこんなトラブル?にも遭いました。

で、困っていたら、redmine.jpにリセット方法が書いてありました

こちらは、script/consoleを利用する方法です。データベースを直接Updateしなくても大丈夫。
(この時点で、自分だけが知っているTips、にはならないかもしれませんが…)

# ruby script/console production
Loading production environment (Rails 2.3.11)
>> admin = User.find_by_login(‘admin’)
=> #<User id: 1, login: "admin", hashed_password: "xxxxxxxxxxxxxxxxxxx", firstname: "Redmine", lastname: "Admin", mail: "admin@somenet.foo", admin: true, status: 1, last_login_on: "2010-02-19 13:14:19", language: "ja", auth_source_id: nil, created_on: "2008-09-29 11:51:33", updated_on: "2010-02-19 13:14:19", type: "User", identity_url: nil, mail_notification: "only_my_events", salt: "">
>> admin.password = ‘xxxxx’
=> "admin"
>> admin.save! #saveをお忘れなく。=> true
>> quit

RAILS_ENV=productionとしても同じく操作できるようです。

実は、パスワードリセットの羽目になるまで、script/console って、使ったことがありませんでした。
わざわざWebのUIからアクセスしなくとも & MySQLのSQL文を使わなくとも、モデルの値の操作とか出来てしまうんですね、便利!(今頃言うのは恥ずかしいけど…)

LDAPなどの認証方式を変える場合は、こちら。(LDAP接続から内部認証方式に切り替えています)

>> user1 = User.find_by_login(‘user1@test.xxxx’)

>> user1.auth_source_id = nil
=> nil
みんなのパスワードと認証方式を変えちゃう場合は、こんなかんじです。
>> @users = User.all
>> for user in @users
>>   user.password = “……”
>>   user.auth_source_id = nil
>>   user.save!
>> end

ユーザさん毎にできる動作や表示される内容が違うので、検証する際にはこの方法を使ったりしています。 こんなくらいですが、なにかのお役に立てれば幸いです…。

* * *

次は@naitohさんです。(@naitohさんのご尽力で、PDF出力に関しては幸せになっております!)
どうぞよろしくお願いいたします!

0 件のコメント:

コメントを投稿