カテゴリ:TIPS

WebDAV経由でsvnリポジトリにコミットできなくてハマった

サーバ側でリポジトリを作成し、作業ディレクトリにチェックアウトまではできるが、作業ディレクトリからコミットできない現象に遭遇しました。


その時のクライアント側のログ:

$ svn add hoge.txt

A hoge.txt

$ svn commit hoge.txt

Log message unchanged or not specified

a)bort, c)ontinue, e)dit

c

svn: Commit failed (details follow):

svn: Can't open activity db: No such file or directory
ファイルが見つからないってどういうこと?



サーバ側のログ (Apacheのerror_log):
[Wed May 27 14:28:14 2009] [error] [client 202.218.216.13] Could not create activity /repos/tmprepo/!svn/act/c41a20c5-6b08-4c73-9da5-e41a2da69086. [500, #0]
[Wed May 27 14:28:14 2009] [error] [client 202.218.216.13] could not open dbm files. [500, #2]
[Wed May 27 14:28:14 2009] [error] [client 202.218.216.13] Can't open activity db: No such file or directory [500, #2]
どうやらsvnの管理情報が書けないエラーのようです。


「Could not create activity」でググってみると、
どうやらリポジトリ直下にdavディレクトリを作成しなければならないらしい。

mkdir /path/to/repo/dav


しかし、別件で作成したリポジトリはそんなことしなくても良かったのになと思ったので、もしかしたらsubversionのバージョンによってリポジトリの構造が違うのかもと思ったら、やっぱりそうらしいです。

After some time searching around for others that had encountered this error, I was able to determine that the problem was that version 1.5 of the svnadmin create command doesn’t create a “dav” directory in the repository, unlike earlier versions.

via: subversion ‘can’t open activity db’| johngirvin.com


1.5から dav/ディレクトリは作られなくなったので手動で作成しろと。。

また同じようにハマりそうなのでエントリ書きました。

でも、もうちょっと気が利いたエラーメッセージにして欲しかったな。

プロジェクト管理ツール Redmine

フリーで使えるBTS(バグトラッキングツール)を導入しようと思い情報収集していたところ、
Tracより良さげなRedmineにたどり着きました。
Tracと比較してのメリットは、こちらに詳しく掲載されています。
ということで、今回はRedmineインストールの顛末記です。

Tracと比較して個人的にメリットを感じたのは、

  • 複数プロジェクトを管理できる
  • デフォルトで日本語対応している
  • ガントチャートが使える
  • RailsアプリでPassenger(mod_rails)に対応(v0.7より)
の4つです。Tracはプロジェクト毎に公開ディレクトリを作成してApacheのhttpd.confを書き換えたりしなければならないのに対し、Redmineは一度設置すればあとは画面上でプロジェクトを作成できます。

また、プロジェクト毎に担当者を設定できるので、社外開発者に解放しても心配ありません。

最後のPassenger対応については、mongrelサーバで動かすよりも実際簡単でした。インストール方法も公式ページに詳細が掲載されています。


■メール通知をGmailのsmtpサーバを利用するようにカスタマイズ
Gmailのsmtpを利用するには、RailsにTLSプラグインを入れなければなりません。
# gem install tlsmail

そして、Redmineの config/environment.rbの最後に以下の2行を追加します。
require "tlsmail"
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
これで送信することができました。


■Subversionリポジトリと連携
Redmineが動作しているサーバに、Subversionリポジトリがあるので連携させようと思ったのですが、ここでハマりました。どのように設定しても、「リポジトリに、エントリ/リビジョンが存在しません。」というエラーが表示されます。


同一サーバ上にリポジトリが存在するので、URLは「file:///リポジトリへのパス」と指定すればいいはずなのですが、一向にうまくいきません。。その他スキーム(http://, svn://)も試したのですがダメでした。

エラーログは下記の通り。
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]

エラーが出ている箇所のソースは以下の22行目です。
$REDMINE_HOME/lib/redmine/scm/adapters/subversion_adapter.rb


# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
require 'redmine/scm/adapters/abstract_adapter'
require 'rexml/document'
module Redmine
module Scm
module Adapters
class SubversionAdapter < AbstractAdapter
# SVN executable name
SVN_BIN = "svn"
# Get info about the svn repository
def info
cmd = "#{SVN_BIN} info --xml #{target('')}"
cmd < doc.elements["info/entry/repository/root"].text,
:lastrev => Revision.new({
:identifier => doc.elements["info/entry/commit"].attributes['revision'],
:time => Time.parse(doc.elements["info/entry/commit/date"].text).localtime,
:author => (doc.elements["info/entry/commit/author"] ? doc.elements["info/entry/commit/author"].text : "")
})
})
rescue => e
logger.error(e)
end

16行目の、#{SVN_BIN} info –xml #{target(”)} こいつを手動で叩くと(もちろんApache実行ユーザで)、きちんとXMLで結果が返ってきているのは確認しています。

Redmineを使ってドキュメント〜ソースまで一気通貫で管理できる!と
意気込んでいたのですが、諦めようかな。。
どなたかヒントをお持ちでしたらご教授いただけますか?



2008/05/15 追記
解決しました。svnの設定情報が/root配下のものを読み込んでおり、Redmineの実行ユーザがapache
なのでPermissionエラーとなっていたようです。

–config-dir オプションを利用して、apacheユーザーのホームディレクトリの設定情報を読み込むように変更します。
$REDMINE_HOME/lib/redmine/scm/adapters/subversion_adapter.rb

require 'redmine/scm/adapters/abstract_adapter'
require 'rexml/document'
module Redmine
module Scm
module Adapters
class SubversionAdapter < AbstractAdapter
# SVN executable name
#        SVN_BIN = "svn"
SVN_BIN = "svn --config-dir /home/apache " # こうする
# Get info about the svn repository
def info

11行目のように書き換える。
あー、すっきりした!

引用スタイルをカスタマイズする

外部ブログやニュースサイトからテキストを引用する時には、HTMLの <blockquote> タグを用います。
今回は、引用のデザインをかっこよくするために、Movable TypeのCSSをカスタマイズしてみました。

続きを読む…

Page 1 of 212