Phusion Passengerのログローテート設定2017/04/12

logrotateでファイルがmvされてもPassengerは以前のファイルを掴んだままなので、これを手放させる必要がある。 方針は2つ?

logrotateをcopytruncateモードで動かす。

  • 旧ログをmvではなくcpした上で旧ログの内容をクリアする。
  • 処理時間がかかるのでログの取り零しが発生しうる。
# /etc/logrotate.d/passenger.log
/path/to/app/shared/log/*log {
  weekly
  missingok
  rotate 1000
  create 0644 user group
  copytruncate
  dateext
}

logrotateのpostrotateでPassengerにアプリを再読み込みさせる。

  • ログの取り零しは発生しない。
  • 次回のアクセス時にRailsの起動コストがかかる。
# /etc/logrotate.d/passenger.log
/path/to/app/shared/log/*log {
  weekly
  missingok
  rotate 1000
  create 0644 user group
  dateext
  sharedscripts
  postrotate
    touch /path/to/app/current/tmp/restart.txt
  endscript
}

うちは緩いサービスなのでcopytruncateで良いけど、copytruncateで取り零しが発生するようなサービスだと、Railsの起動コストはもっと耐えられないような気がするけど……。

RailsDevCon 20102010/11/20

http://railsdevcon.jp/

行ってきた。

開会挨拶

趣旨説明など。

  • Rails Conf の日本版があっても良いんじゃないか
  • Ruby会議が来年での終息を(とりあえずは)宣言しているのでその後継の一つに

その意気やよし。協力できることがあれば微力ながらと思わないでもないけど、 スーツな人たちとの距離感をどう考えているのかが、ちょっと不安。

渡米して感じたこと

  • アメリカでプログラマをやるならCSの学位は必須
  • Railsエンジニアのボリューム価格帯は $1万~1.5万/月
  • 英語の勉強にはあまりならない

学歴ロンダリング必須かあ。大学院の学費x5年分とか結構しんどい。

Rails情報源の歩き方

後日 @ITの記事になるらしいので、子細はそちらで。

とあるソーシャルアプリの開発運用

一番興味深かったセッション。

  • 大手SNSのアプリ開発はスケールとの戦い
  • リリース間隔は短かく。でないと、ユーザに飽きられる
  • 各種ライブラリの紹介

Railsプロジェクトを成功させるために現場ができること

Railsに限った話ではなく、一般的な受託開発においてユーザ(発注者)の満足を 勝ち取るためにエンジニアが心掛けるべきこと。

基本重要。

現実の世界で "はじめる!Cucumber"

  • ユーザと対話するための資料
  • 明日の(昨日の)自分たちと対話するための資料
  • 無謬性は求めず適当にそれっぽいところから始める
  • Cucumberがどうこうユーザに語ったりしない

まあ、エンジニア相手でもなければ技術を熱く語るのは上策ではないよね。

Rails Add-onsで楽々開発

  • plug-in や 外部webサービスを有効に利用しよう
  • Herokuはちょっと外れた使い方をするとえらく高くつく

確かHerokuのバックエンドってEC2じゃなかったっけ?

初めてがRuby

  • 我々は次の世代の若者たちにRubyを授ける義務を負っている

という提言自体はある種同意はできるけど、このセッションの構成はいただけない。

興味がない会社の新人研修のしくみの紹介に随分と時間が割かれて、なおかつその時間を捻出するために これ以前のセッションのスケジュールに巻きを入れられていたのも印象を悪くした一因だし、 また僕が「プログラミングの講習」というもの自体を信用していないので、 失礼だけれども吉田氏のような方にはある種のうさん臭さを感じてしまうというのはあるのだろうけれども。

根本的に「パネルディスカッション」を題したセッションに当たりは無いという無責任な法則をでっちあげることにする。

Oracleの中の人

  • 本日の参加者で今月のOracleのオフィシャルイベントに参加した人は挙手 → 皆無
  • この断絶をなんとかしたい

その懸念は理解できる。 MySQLはありがたく使ってます。コンゴトモヨロシク

総括

「こういうカンファレンスをやりたい」という決起集会のような感じで、手作り感溢れるイベントだった。

ただ、各セッションに質疑応答の時間が設けられていないのは如何なものかと思う。

Passenger 3.0 released !2010/10/20

新規ホストのセットアップをしていて新バージョンに気付くこの体たらく……。

リリースノートによると、パフォーマンスの向上とRuby1.9.2/Rails3の正式サポートがキモなのかな?

スタンドアロン版がマージされたようですが、スタンドアロンで使うならUnicornを使うと思うので……(ry

あと、RVMの存在が感知されるようになり、apache/nginx のモジュールのコンパイル後にサジェストされるconfigがそのままコピペできるようになっています。

RVMの方でも、Passenger 2系では必須だった passenger_ruby を作成しようとすると

$ rvm 1.8.7 --passenger
If you are using Passenger 3 you no longer need the passenger_ruby,
use the wrapper script for your ruby instead (see 'rvm wrapper')

と丁寧に説明してくれるようになっています。

あとは今のところ違和感なく動作している模様。

redmine 導入2010/04/14

背景

いろいろ必要に迫られて、issue tracking system の導入自体は確定させたものの、

issue tracking system ? なにそれ? それっておいしい?

みたいな環境に放り込むので、事例が多くて「ググれカス」ぐらいの説明で導入できるものが良い。 というぐらいの理由で選択した trac の運用が四半期を越えたぐらい。

ITSの意義は概ね理解、賛同いただけたところではあるのだけれど、いくつかの要望に対応するのに trac ではしんどいところが出てきたので、引越し先の選定を開始しました。

その一つが redmine

redmine

今更説明の必要もないぐらい名前の売れたRoRアプリの一つ。

現在の最新安定板は 0.9.3

tar玉を解凍して中身を眺めた感じでは、清々しいぐらいに普通のRailsアプリです。ありがとうございました。 これなら、結構好きにカスタマイズできそうです。

対応のRailsのバージョンは2.3.5

config/database.yml を編集。 そして

$ rake db:create RAILS_ENV=production
$ rake db:migrate RAILS_ENV=production

rake aborted!
A key is required to write a cookie containing the session data. Use config.action_controller.session = { :key => "_myapp_session", :secret => "some secret phrase" } in config/environment.rb

あれ?(^^;

. . .

ふむ。通常のRailsではプロジェクトの作成時に自動的に生成される ActionController::Base.session のsession生成用の鍵を明示的に生成してあげないといけないようです。 まあ、あちこちのredmineが同じ鍵で動いていたら大変な事になるので、合理的な判断ですね。

$ rake config/initializers/session_store.rb
$ cat config/initializers/session_store.rb

ActionController::Base.session = {
  :session_key => '_redmine_session',
  :secret => '(略)'
}

$ rake db:migrate RAILS_ENV=production

今度は上手くいきました。

あと、必須ではないけれど、DBにデフォルトデータを流しておくと良いことがあるらしいです。

$rake redmine:load_default_data RAILS_ENV=production
Select language: bg, bs, ca, cs, da, de, el, en, es, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sv, th, tr, uk, vi, zh, zh-TW [en]

使用する言語を訊かれるので ja(日本語)で。

====================================
Default configuration data loaded.

完了。

あと、メールを使用するつもりがあるなら、email.yml を編集しておくと良いらしいです。

このemail.yml には ActionMailerの設定項目では見掛けないキーワードがあったりするけど、メール周りは独自実装なのかしら? あとで、ソースを確認しよう。

で、今回は(も) passenger を利用するので、apacheの公開ディレクトリから、プロジェクトのpublicにsynlinkを張って、

# ln -s /var/www/readmine/public /var/www/html/redmine

適当な apache の設定ファイルに

RailsBaseURI /redmine

を書いたら終了。

# /etc/init.d/httpd reload

apacheに設定ファイルを再読み込みさせれば、redmineの画面が確認できるようになります。

passenger良いね。

設定画面を触っていたら、ImageMagickの連携機能があるようだったので、 Rmagick もインストールしておく。

rvm gem install rmagick --version 1.15.17

バージョン指定をしてるのは、ImageMagickを入れなおすのがめんどいから。 以前話題にした、バージョン指定でのネイティブビルドがコケる件は RubyGems の 1.3 ぐらいで直っています。

で、

touch tmp/restart.txt

passenger 良い。

とりあえず、今日は導入まで。

感想はまた後日。

OpenID

設定画面に「OpenIDで認証する」という設定項目が、が、が……。

これは、Shibbolethにも対応しないといかんだろと思って、プラグインを用意しかけたところで、試しにぐぐると、そのものずばりの話題がありました……。

これって、本家に pull request はしてないのかな?

今日もPassenger2010/03/11

完全に自分用メモです。

Shibboleth SPを Passengerで配置したアプリと協働させるようにするには

RAILS_ROOT/public/Shibboleth.sso/SAML/POST
RAILS_ROOT/public/Shibboleth.sso/SAML2/POST

に内容は何でも良いので、何かファイルを置く。 参考:Shib-Users-ML

ファイルが実在すれば、mod_passenger は仕事をしないので、mod_shibが割り込む余地ができるというところで、 mod_rewrite の時に

ProxyPass        /Shibboleth.sso !

などと書いていたのと概念的には同じことだろう。