jenkinsでFindBugsを実行した際に行数がうまく表示されない場合
少し枯れた話題ですが、 調べても情報がなかったので。
javaのプロジェクトを行っていると、 FindBugsを定期的に実行して、 コードレビューを効率化、というのは割と良くある事だと思います。
で、antタスクなりmavenなりでFindBugsが実行できて、 Jenkinsおじさんが青信号を返してきてくれました。 なのに下の画像のように行数が-1になってしまうという現象についてです。
ここが正しく認識されると、 Jenkins上から警告されているソースの場所を確認でき、 大変便利になります。
原因は、javaソースのコンパイル時にdebug情報(ソースの行数等)、 を含めていなかった事にありました。 リリースするビルドの場合、 debug情報を含めるべきではないと思うのですが、 そのままでは上記の現象が発生します。
antの場合は、 build.xmlのjavacの要素に、 debug="on" を追加するだけでOK!
シンプルな問題でしたがなかなか解決されず放置になっていました。 ご参考までに。
mongodbを使ったRailsアプリをunicorn×nginxで動作させる
結論から言うと、mongoDBは関係ない。 もちろん、mongoDBのO/Rマッパーであるmongoidも。
unicorn×nginxという構成について情報は非常にたくさんありますが、 結局どういう仕組みなのかいまひとつピンときませんでした。
要は、当たり前っちゃ当たり前なのですが、 nginxがリバースプロキシサーバ兼WEBサーバとして、 unicornが稼働しているポートに振り分ける、 そういう設定をしてあげればOKでした。
下記は本件に関して大変わかりやすいGist。 https://gist.github.com/FoboCasteR/3811810
rails sidekiqでバックグラウンドジョブ管理②
railsのバックグラウンドジョブ実行をsidekiqで実現する第2回。
本日はWorkerを作成する所からです。
本家では
Add a worker in app/workers to process messages asynchronously:
といっておりますので、 とりあえずappフォルダ以下にworkersという階層を作ります。
そして同階層にhogeWorker.rbを適当に作って(本家より引用)、
class HardWorker
include Sidekiq::Worker
def perform(name, count)
# do something
end
end
といった形でクラスを作ります。
do something
にやらせたい処理を書いて下さい。
putsは実行するとsidekiqコンソールに表示されるので、 実際に動いているか確認する事が可能です。
で、ここまで整えば、後は呼ぶだけです。
$rails c
>HardWorker.perform_async
と実行すると、sidekiqが動いてくれます。 perform_asyncを呼ぶとperform内で定義した処理を、 ジョブ実行する感じです。
Workerは4種類のオプションをもっています(また本家引用)
class HardWorker
include Sidekiq::Worker
sidekiq_options :queue => :crawler, :timeout => 60, :retry => false, :backtrace => true
def perform(name, count)
end
end
:queue は実行時のキューを指定できます。defaultは'default'です。 :timeout はキューでの待ち時間です。defaultはnil。動作的には無制限っぽいです。 :retry はジョブ失敗時にリトライするかどうかです。defaultはtrue。 :backtrace はエラー時のバックトレースを表示するかどうかっぽいです。
次は実際に蹴ってみてWEBUIで確認してみるところを。
rails sidekiqでバックグラウンドジョブ管理①
railsでジョブ管理を行いたかったため、 sidekiqを使ってみました。
参照 http://railscasts.com/episodes/366-sidekiq?language=ja&view=asciicast
こちらが本家 https://github.com/mperham/sidekiq/wiki
本家のHOMEにはこのように書いてあります。
It is very efficient because it is multi-threaded. Instead of using 20 processes, you just have one process with 20 threads. Yes, you will see a big improvement, even with Ruby 1.9's GIL.
訳:
ハイ!エンジニアのみんなこんにちは。今日は僕が作ったとっておきのGEMを紹介するぜ!
こいつがどんなものか知りたいかい!?君はとっても欲しがりさんだね。言いだろう教えてあげるよ!
これはマルチスレッドでとっても効果的なんだ。
20のプロセスのかわりに、20スレッドの、たったひとつの、たったひとつの、たっっっったひとつのプロセスができるだけなんだよ!
こいつはとっても大きな改善さ!ruby1.9のGIL(グローバルインタプリタロックの略なんだぜ!こいつのせいでシリアライズされてたんだ)でもね。
どうしてこんなにもノリノリなリリースが出せるのか日本人の私にはわかりませんが、
これがきっとあちらのやり方なのでしょう。
例によってまずは書いてある通りに。
Gemfileに
gem 'sidekiq'
を記載して
\$ bundle install
を実行します。
これでgemがインストールされました。
また、sidekiqはredis(詳細はこちら:http://redis.io/ )
を使っているため、redisもインストールします。
MacOSXの場合はHomebrewを使って、
\$ brew install redis \$ redis-server /usr/local/etc/redis.conf
で、デフォルトポート6379でredisが動作しはじめます。
次はワーカーを登録します。
いったんここまで。
railsで復号可能な暗号化の実装
ほぼ下記サイト掲載情報のままですが、
https://gist.github.com/etorov/1104121
http://mono-comp.com/programming/rails-web-appli-register/
今回使っているのはAES256という暗号方式です。 AES方式の鍵長が256ビットとの事。 14ラウンド。ボクシングよりちょい長いですね。強度は十分。 鍵長がのびるとラウンドが増え、 暗号の強度は増しますが、処理に時間がかかるようになるとの事。
さて、実装ですが、
これを例えばlib以下に配置して、 modelで、
といった具合に適切なタイミングで呼び出してあげればOK
コールバックメソッドと組み合わせる事で、 ソース上の独立性を担保して実装できそう。
zabbix
昨日参加したOSSカンファレンス2013Tokyoより 「Linux-HA を利用した Zabbix2.0 の高信頼クラスタの構築、検証報告」
http://www.miraclelinux.com/jp/online-service/download/docs-products-service/zabbix_and_linux-ha
mongoidとactiverecordが併存する場合のmigration
mongoidとactiverecordが併存する場合で、
mongoidを優先させていると、
rails generate等のコマンド発行時にmongoidで解決しようとする。
このため、通常は、
rails g migration AddHoge
等で解決できるが、mongoidにそんなのないよ、
error mongoid [not found]
と怒られるので、明示的に、
rails g active_record:migration AddHoge
とする事で解決できる。
active_recordと間にアンダーバーが入るので注意。