http://www.sdmemo.com/w/index.php?title=%E7%89%B9%E5%88%A5:%E6%96%B0%E3%81%97%E3%81%84%E3%83%9A%E3%83%BC%E3%82%B8&feed=atom&limit=50&offset=&namespace=0&username=&tagfilter=
Software Development Memo - 新しいページ [ja]
2024-03-28T15:48:16Z
提供:Software Development Memo
MediaWiki 1.37.1
http://www.sdmemo.com/wiki/CDI%E3%83%A1%E3%83%A2
CDIメモ
2013-06-29T16:51:26Z
<p>Admin: </p>
<hr />
<div>{{Stub}}<br />
<br />
[[Category:ソフトウェア開発]] [[Category:Java]]<br />
<br />
JSR 299で定義されているCDIのサンプルコードです。CDIに関する日本語のドキュメントが無いので、作成してみようと思った次第です。<br />
<br />
== 環境 ==<br />
<br />
* GlassFish : 3.1.2<br />
* OS : Windows 8<br />
* Java : 1.6<br />
<br />
== シンプルなCDIサンプル ==<br />
<br />
=== 呼び出し側 ===<br />
<br />
<source lang="java"><br />
package tmp;<br />
<br />
import java.io.IOException;<br />
<br />
import javax.inject.Inject;<br />
import javax.servlet.ServletException;<br />
import javax.servlet.annotation.WebServlet;<br />
import javax.servlet.http.HttpServlet;<br />
import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;<br />
<br />
@WebServlet("/Main00")<br />
public class Main00 extends HttpServlet {<br />
<br />
@Inject<br />
private CdiTest cdi;<br />
<br />
@Override<br />
protected void doGet(HttpServletRequest request, HttpServletResponse response)<br />
throws ServletException, IOException {<br />
cdi.hello();<br />
}<br />
}<br />
</source><br />
<br />
<br />
=== Injectionクラス ===<br />
<br />
<source lang="java"><br />
package tmp;<br />
<br />
public class CdiTest {<br />
<br />
public CdiTest() {<br />
System.out.println("init.");<br />
}<br />
<br />
public void hello() {<br />
System.out.println("hello.");<br />
}<br />
<br />
}<br />
</source><br />
<br />
=== 実行結果 ===<br />
<br />
以下、ブラウザでサーブレットを複数回呼び出したときのログです。<br />
<br />
<source lang="text"><br />
情報: init.<br />
情報: hello.<br />
<br />
情報: hello.<br />
<br />
情報: hello.<br />
<br />
情報: hello.<br />
</source><br />
<br />
サーブレット初回コール時に、CdiTestのコンストラクタが呼ばれ、インスタンスが使い回しされます。<br />
<br />
== @Produces を使用したサンプル ==<br />
<br />
@Produces アノテーションを使用すると、インスタンスを取得するためのメソッドを指定できます。<br />
<br />
=== サンプルコード ===<br />
<br />
<source lang="java"><br />
package tmp;<br />
<br />
import javax.enterprise.inject.Produces;<br />
<br />
public class Producer {<br />
<br />
@Produces<br />
public static CdiTest getCdiTest() {<br />
System.out.println("factory method has called.");<br />
return new CdiTest();<br />
}<br />
}<br />
</source><br />
<br />
CdiTest クラスには @Any アノテーションを付与します。<br />
<br />
<source lang="java"><br />
package tmp;<br />
<br />
import javax.enterprise.inject.Any;<br />
<br />
@Any<br />
public class CdiTest {<br />
<br />
public CdiTest() {<br />
System.out.println("init.");<br />
}<br />
<br />
public void hello() {<br />
System.out.println("hello.");<br />
}<br />
<br />
}<br />
<br />
</source><br />
<br />
=== 実行結果 ===<br />
<br />
<source lang="text"><br />
情報: factory method has called.<br />
情報: init.<br />
情報: hello.<br />
<br />
情報: hello.<br />
<br />
情報: hello.<br />
</source><br />
<br />
== @Qualifier を使用してインジェクションを行うメソッドを指定 ==<br />
<br />
@Qualifier アノテーションを付与したアノテーションを定義することで、インジェクションを行うメソッドを指定することができます。<br />
<br />
=== サンプルコード ===<br />
<br />
アノテーション @A01 を作成します。<br />
<br />
<source lang="java"><br />
package tmp;<br />
<br />
import java.lang.annotation.Retention;<br />
import java.lang.annotation.Target;<br />
<br />
import javax.inject.Qualifier;<br />
import static java.lang.annotation.RetentionPolicy.RUNTIME;<br />
import static java.lang.annotation.ElementType.TYPE;<br />
import static java.lang.annotation.ElementType.METHOD;<br />
import static java.lang.annotation.ElementType.FIELD;<br />
import static java.lang.annotation.ElementType.PARAMETER;<br />
<br />
@Qualifier<br />
@Retention(RUNTIME)<br />
@Target({TYPE, METHOD, FIELD, PARAMETER})<br />
public @interface A01 {}<br />
<br />
</source><br />
<br />
次に、アノテーション @A02 を作成します。<br />
<br />
<source lang="java"><br />
package tmp;<br />
<br />
import java.lang.annotation.Retention;<br />
import java.lang.annotation.Target;<br />
<br />
import javax.inject.Qualifier;<br />
import static java.lang.annotation.RetentionPolicy.RUNTIME;<br />
import static java.lang.annotation.ElementType.TYPE;<br />
import static java.lang.annotation.ElementType.METHOD;<br />
import static java.lang.annotation.ElementType.FIELD;<br />
import static java.lang.annotation.ElementType.PARAMETER;<br />
<br />
@Qualifier<br />
@Retention(RUNTIME)<br />
@Target({TYPE, METHOD, FIELD, PARAMETER})<br />
public @interface A02 {}<br />
</source><br />
<br />
作成したアノテーション @A01 と @A02 を使用して、オブジェクトの初期化方法を定義する。<br />
<br />
<source lang="java"><br />
package tmp;<br />
<br />
import javax.enterprise.inject.Produces;<br />
<br />
public class Producer {<br />
<br />
@Produces @A01<br />
public static CdiTest getCdiTest() {<br />
System.out.println("A01");<br />
return new CdiTest();<br />
}<br />
<br />
@Produces @A02<br />
public static CdiTest getCdiTest2() {<br />
System.out.println("A02");<br />
return new CdiTest();<br />
}<br />
}<br />
</source><br />
<br />
インジェクションをする例、@Inject @A01 と指定することで、Producer#getCdiTest が呼ばれるようになります。<br />
<br />
<source lang="java"><br />
package tmp;<br />
<br />
import java.io.IOException;<br />
<br />
import javax.inject.Inject;<br />
import javax.servlet.ServletException;<br />
import javax.servlet.annotation.WebServlet;<br />
import javax.servlet.http.HttpServlet;<br />
import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;<br />
<br />
@WebServlet("/Main00")<br />
public class Main00 extends HttpServlet {<br />
<br />
@Inject @A01<br />
private CdiTest cdi;<br />
<br />
@Override<br />
protected void doGet(HttpServletRequest request, HttpServletResponse response)<br />
throws ServletException, IOException {<br />
cdi.hello();<br />
}<br />
}<br />
</source><br />
<br />
<br />
<br />
=== 実行結果 ===<br />
<br />
<source lang="text"><br />
情報: A01<br />
情報: init.<br />
情報: hello.<br />
<br />
情報: hello.<br />
<br />
情報: hello.<br />
</source><br />
<br />
== 更新履歴 ==<br />
<br />
* 仮ページ作成 -- 2013年6月30日 (日) 01:51 (JST)</div>
Admin
http://www.sdmemo.com/wiki/MySQL_5.5%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86
MySQL 5.5の導入手順
2012-11-12T15:26:19Z
<p>Admin: /* MySQL */</p>
<hr />
<div>[[Category:ソフトウェア開発]][[Category:導入手順]]<br />
<br />
{{Stub}}<br />
<br />
MySQLのバージョンが5.5になり、5.1の時と比較して導入手順に若干変化があったため改めて導入手順を記述します。<br />
<br />
== 環境 ==<br />
<br />
* OS : CentOS 6.3 x86-64<br />
* Web Server : Apache 2.2.17<br />
* Database : MySQL 5.1.54<br />
<br />
== インストール ==<br />
<br />
=== CMake ===<br />
<br />
バージョン5.5よりビルドツールにCMakeを使用するようになったため、追加でインストールします。<br />
<br />
yum -y install cmake<br />
<br />
=== ncurses-devel===<br />
<br />
MySQLインストール時に必要なライブラリをインストールします。<br />
<br />
yum -y install ncurses-devel<br />
<br />
=== MySQL ===<br />
<br />
入手先 : http://www-jp.mysql.com/downloads/mysql/<br />
<br />
<source lang="text"><br />
$ tar zvxf mysql-5.5.28.tar.gz<br />
$ cd mysql-5.5.28<br />
$ cmake .<br />
$ make<br />
# make install<br />
</source><br />
<br />
== 設定 ==<br />
<br />
=== MySQL ===<br />
<br />
ユーザ「mysql」を作成し、DBを初期化します。<br />
<br />
MySQLのバイナリにパスを通すため、「/etc/bashrc」に以下を追記します。<br />
<br />
export PATH=$PATH:/usr/local/mysql/bin<br />
<br />
ユーザ「mysql」を作成し、DBを初期化します。<br />
<br />
<source lang="text"><br />
# /usr/sbin/useradd mysql<br />
# cd /usr/local/mysql/<br />
# scripts/mysql_install_db --user=mysql<br />
</source><br />
<br />
pidファイルを配置るためのフォルダを作成します。<br />
<br />
<source lang="text"><br />
# mkdir /var/run/mysqld<br />
# chown mysql.mysql /var/run/mysqld<br />
</source><br />
<br />
DBを起動し、rootのパスワードを設定します。<br />
<br />
<source lang="text"><br />
# mysqld_safe --user=mysql &<br />
# mysqladmin -u root password <password><br />
</source><br />
<br />
ユーザーを作成します。ここでは、ネットワーク経由でDBにアクセスするために、「"%"」としています。<br />
<br />
<source lang="sql"><br />
mysql> GRANT ALL privileges ON *.* TO <username>@"%" IDENTIFIED BY 'rootroot' WITH GRANT OPTION;<br />
</source><br />
<br />
== 更新履歴 ==<br />
* ページ作成 -- 2012年11月13日 (火) 20:15 (JST)</div>
Admin
http://www.sdmemo.com/wiki/Subversion,Apache%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86
Subversion,Apacheの導入手順
2012-03-04T07:44:44Z
<p>Admin: </p>
<hr />
<div>[[Category:ソフトウェア開発]]<br />
<br />
このページは、HTTP経由でSubversionを使用するための手順を記述します。内容は、[[Review Boardの導入手順]]の内容を抜き出して、多少修正したものです。<br />
<br />
<br />
== 環境 ==<br />
<br />
* OS : CentOS 6.2<br />
* Apache : 2.2.17<br />
* Subversion : 1.6.15<br />
<br />
== インストール ==<br />
<br />
=== Apache ===<br />
<br />
入手先 : http://httpd.apache.org/<br />
<br />
<source lang="text"><br />
$ tar zxvf httpd-2.2.17.tar.gz<br />
$ cd httpd-2.2.17<br />
$ ./configure --enable-dav<br />
$ make<br />
# make install<br />
</source><br />
<br />
「--enable-dav」はSubversionインストール時に導入されるモジュール「dav_svn_module」を動作させるために必要です。<br />
<br />
=== neon ===<br />
<br />
Subversionのコマンドでhttpスキームを使用するために必要なライブラリであるneonをインストールします。svnコマンドでhttpスキーム(「svn co http://」等)を使用しない場合は、インストール不要です。<br />
<br />
入手先 : http://www.webdav.org/neon/<br />
<br />
<source lang="text"><br />
$ tar zxvf neon-0.29.5.tar.gz <br />
$ cd neon-0.29.5<br />
$ ./configure<br />
$ make<br />
# make install<br />
</source><br />
<br />
=== SQLite Amalgamation ===<br />
<br />
Subversionのビルドに必要となるSQLiteのソースコードをダウンロードします。<br />
<br />
入手先 : http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz<br />
<br />
=== Subversion ===<br />
<br />
入手先 : http://subversion.tigris.org/<br />
<br />
<source lang="text"><br />
$ tar jxvf subversion-1.6.15.tar.bz2<br />
$ tar zxvf sqlite-amalgamation-3.6.13.tar.gz <br />
$ mv sqlite-3.6.13/ subversion-1.6.15/sqlite-amalgamation<br />
$ cd subversion-1.6.15<br />
$ ./configure<br />
$ make<br />
# make install<br />
</source><br />
<br />
== 設定 ==<br />
<br />
=== Apache ===<br />
<br />
「/usr/local/apache2/conf/httpd.conf」を編集します。<br />
<br />
<source lang="text"><br />
LoadModule dav_svn_module modules/mod_dav_svn.so<br />
LoadModule authz_svn_module modules/mod_authz_svn.so<br />
<br />
<Location "/svn/test/test01"><br />
DAV svn<br />
SVNPath /var/lib/svn/test/test01<br />
AuthzSVNAccessFile /usr/local/apache2/conf/svn.authz<br />
AuthType Basic<br />
AuthName "Subversion Repository"<br />
AuthUserFile /usr/local/apache2/conf/.htpasswd<br />
Require valid-user<br />
</Location><br />
</source><br />
<br />
=== svn.authz ===<br />
<br />
アクセス制御ファイルを「/usr/local/apache2/conf/svn.authz」に作成します。<br />
<br />
<source lang="text"><br />
[groups]<br />
admin = user01<br />
<br />
[/]<br />
@admin = rw<br />
</source><br />
<br />
=== .htpasswd ===<br />
<br />
ApacheのBasic認証ファイルを「/usr/local/apache2/conf/.htpasswd」に作成します。<br />
<br />
# /usr/local/apache2/bin/htpasswd -c /usr/local/apache2/conf/.htpasswd user01<br />
New password: <br />
Re-type new password: <br />
Adding password for user user01<br />
<br />
=== リポジトリ作成 ===<br />
<br />
Subversionリポジトリを作成します。リポジトリのパーミッションはApacheの実行ユーザー(初期値ではdaemon)とします。<br />
<br />
# mkdir -p /var/lib/svn/test/test01<br />
# cd /var/lib/svn/test/test01<br />
# svnadmin create .<br />
# chown daemon.daemon /var/lib/svn/ -R<br />
<br />
== 起動 ==<br />
<br />
=== Apache ===<br />
<br />
# /usr/local/apache2/bin/apachectl start<br />
<br />
Apache起動後、「http://<Apacheのホスト名>/svn/test/test01/」でチェックアウトできれば設定完了です。<br />
<br />
== 更新履歴 ==<br />
<br />
* ページ作成 -- 2012年3月4日 (日) 16:44 (JST)</div>
Admin
http://www.sdmemo.com/wiki/%E3%83%9A%E3%83%BC%E3%82%B8%E9%80%86%E5%BC%95%E3%81%8D
ページ逆引き
2012-03-04T05:02:50Z
<p>Admin: </p>
<hr />
<div>[[Category:その他]]<br />
<br />
<br />
簡単なページ逆引きリストです。自分でも知りたい情報がどこにあるか分からなくなる事があるので…。<br />
<br />
<br />
== 更新履歴 ==<br />
<br />
* ページ作成 -- 2012年3月4日 (日) 14:02 (JST)</div>
Admin
http://www.sdmemo.com/wiki/Ruby_on_Rails%E3%83%A1%E3%83%A2
Ruby on Railsメモ
2011-08-08T09:27:38Z
<p>Admin: ページの作成: Category:Tips == トラブルシューティング == === sqlite3-rubyのインストールに失敗する === CentOS5.4環境にて、sqlite3-rubyをインストールし...</p>
<hr />
<div>[[Category:Tips]]<br />
<br />
== トラブルシューティング ==<br />
<br />
=== sqlite3-rubyのインストールに失敗する ===<br />
<br />
CentOS5.4環境にて、sqlite3-rubyをインストールしようとしたら以下エラーとなりました。<br />
<br />
<pre><br />
# gem install --remote sqlite3-ruby<br />
Building native extensions. This could take a while...<br />
ERROR: Error installing sqlite3-ruby:<br />
ERROR: Failed to build gem native extension.<br />
<br />
/usr/local/bin/ruby extconf.rb<br />
checking for sqlite3.h... yes<br />
checking for sqlite3_libversion_number() in -lsqlite3... yes<br />
checking for rb_proc_arity()... no<br />
checking for sqlite3_initialize()... no<br />
checking for sqlite3_backup_init()... no<br />
checking for sqlite3_column_database_name()... no<br />
checking for sqlite3_enable_load_extension()... no<br />
checking for sqlite3_load_extension()... no<br />
creating Makefile<br />
<br />
make<br />
gcc -I. -I. -I/usr/local/lib/ruby/1.8/x86_64-linux -I. -fPIC -g -O2 -c database.c<br />
database.c: In function ‘initialize’:<br />
database.c:47: error: ‘SQLITE_OPEN_READWRITE’ undeclared (first use in this function)<br />
database.c:47: error: (Each undeclared identifier is reported only once<br />
database.c:47: error: for each function it appears in.)<br />
database.c:47: error: ‘SQLITE_OPEN_CREATE’ undeclared (first use in this function)<br />
database.c:72: error: ‘SQLITE_OPEN_READONLY’ undeclared (first use in this function)<br />
database.c: In function ‘set_sqlite3_func_result’:<br />
database.c:278: error: ‘sqlite3_int64’ undeclared (first use in this function)<br />
make: *** [database.o] エラー 1<br />
<br />
<br />
Gem files will remain installed in /usr/local/lib/ruby/gems/1.8/gems/sqlite3-1.3.4 for inspection.<br />
Results logged to /usr/local/lib/ruby/gems/1.8/gems/sqlite3-1.3.4/ext/sqlite3/gem_make.out<br />
<br />
</pre><br />
<br />
CentOS5.4標準のsqlite3(3.3.6)を、2011/08/08時点の最新バージョンである3.7.7.1に置き換えたら正常にインストールできました。<br />
<br />
* その他環境<br />
** ruby 1.8.7<br />
** gem 1.4.2<br />
<br />
-- 2011年8月8日 (月) 18:27 (JST)<br />
<br />
== 更新履歴 ==<br />
* ページ作成 -- 2011年8月8日 (月) 18:27 (JST)</div>
Admin
http://www.sdmemo.com/wiki/Sonar%E3%81%A7JUnit%E3%81%AE%E3%82%AB%E3%83%90%E3%83%AC%E3%83%83%E3%82%B8%E3%82%92%E5%8F%96%E5%BE%97
SonarでJUnitのカバレッジを取得
2011-05-05T12:25:45Z
<p>Admin: ページの作成: {{Template:Stub}} Category:ソフトウェア開発 本ページは、SonarでJUnitのカバレッジを取得する手順を記述します。ビルドツールはAnt、...</p>
<hr />
<div>{{Template:Stub}}<br />
<br />
[[Category:ソフトウェア開発]]<br />
<br />
本ページは、SonarでJUnitのカバレッジを取得する手順を記述します。ビルドツールはAnt、カバレッジツールはCoberturaを使用しています。<br />
<br />
Sonarの手順は[[Ant,Jenkins,Sonarの導入手順]]を参照してください。<br />
<br />
== 環境 ==<br />
<br />
* OS : CentOS 5.5<br />
* Jenkins : 1.409<br />
* Sonar : 2.7 <br />
* Ant : 1.8.2<br />
* JUnit : 4.8.2<br />
* Cobertura : 1.9.4.1<br />
<br />
== 導入手順 ==<br />
<br />
=== Sonar測定用Javaプロジェクトの用意 ===<br />
<br />
Sonar測定用Javaプロジェクトを作成し、Subversionリポジトリにコミットします。<br />
<br />
=== JUnitのjarを取得 ===<br />
<br />
入手先 : http://www.junit.org/<br />
<br />
「junit-4.8.2.jar」をJavaプロジェクトの「lib」ディレクトリに保存します。(「lib」ディレクトリは例なので適宜変更しても問題ありません)<br />
<br />
=== hamcrestのjarを取得 ===<br />
<br />
入手先 : http://code.google.com/p/hamcrest/<br />
<br />
JUnitの動作に必要なhamcrestを取得します。「hamcrest-core-1.3.0RC2.jar」をJavaプロジェクトの「lib」ディレクトリに保存します。<br />
<br />
<br />
=== Cobertureのjarを取得 ===<br />
<br />
入手先 : http://cobertura.sourceforge.net/<br />
<br />
「cobertura-1.9.4.1-bin.zip」をダウンロード後解凍し、「cobertura-1.9.4.1」ディレクトリをJavaプロジェクトの「「lib」ディレクトリに保存します。<br />
<br />
=== build.xml作成 ===<br />
<br />
build.xmlファイルの例を以下に記述します。<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<project name="sample" default="compile" basedir="." xmlns:sonar="antlib:org.sonar.ant"><br />
<description>Sonarサンプル</description><br />
<property environment="env" /><br />
<property name="src" location="src"/><br />
<property name="build" location="bin"/><br />
<property name="dist" location="dist"/><br />
<property name="instrument" location="instrument"/><br />
<property name="report" location="report"/><br />
<property name="cobertura" location="lib/cobertura-1.9.4.1"/><br />
<br />
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"><br />
<classpath path="${env.ANT_HOME}/lib/sonar-ant-task-1.0.jar" /><br />
</taskdef><br />
<br />
<path id="cobertura.classpath"><br />
<fileset dir="${cobertura}"><br />
<include name="cobertura.jar" /><br />
<include name="lib/**/*.jar" /><br />
</fileset><br />
</path><br />
<br />
<taskdef classpathref="cobertura.classpath" resource="tasks.properties" /><br />
<br />
<target name="init"><br />
<tstamp/><br />
<mkdir dir="${build}"/><br />
</target><br />
<br />
<target name="compile" depends="init" description="compile the source"><br />
<javac srcdir="${src}" destdir="${build}" includeantruntime="false" encoding="UTF-8" debug="true"><br />
<classpath><br />
<pathelement path="lib/junit-4.8.2.jar" /><br />
</classpath><br />
</javac><br />
</target><br />
<br />
<target name="instrument"><br />
<cobertura-instrument todir="${instrument}"><br />
<fileset dir="${build}"><br />
<include name="**/*.class" /><br />
<exclude name="**/*Test.class" /><br />
</fileset><br />
</cobertura-instrument><br />
</target><br />
<br />
<target name="test"><br />
<mkdir dir="${report}"/><br />
<junit fork="yes" haltonfailure="false"><br />
<formatter type="xml" /><br />
<classpath><br />
<pathelement location="${instrument}" /><br />
<pathelement location="${build}" /><br />
<pathelement path="${cobertura}/cobertura.jar" /><br />
<pathelement path="lib/junit-4.8.2.jar" /><br />
<pathelement path="lib/hamcrest-core-1.3.0RC2.jar" /><br />
</classpath><br />
<br />
<batchtest todir="${report}"><br />
<fileset dir="${src}"><br />
<include name="**/*Test.java" /><br />
</fileset><br />
</batchtest><br />
<br />
</junit><br />
</target><br />
<br />
<target name="report"><br />
<cobertura-report format="xml" destdir="${report}" ><br />
<fileset dir="${src}"><br />
<include name="**/*.java" /><br />
</fileset><br />
</cobertura-report><br />
</target><br />
<br />
<target name="sonar" description="analyze project" ><br />
<sonar:sonar workDir="/tmp/sonar/test10" key="com.example.test10:test10" version="0.1"><br />
<property key="sonar.jdbc.url" value="jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8" /><br />
<property key="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver" /><br />
<property key="sonar.jdbc.username" value="sonar" /><br />
<property key="sonar.jdbc.password" value="sonar" /><br />
<property key="sonar.host.url" value="http://<SONAR_HOST_NAME>:8080/sonar" /><br />
<property key="sonar.sourceEncoding" value="UTF-8" /><br />
<property key="sonar.java.source" value="1.6" /><br />
<property key="sonar.java.target" value="1.6" /><br />
<br />
<sources><br />
<path location="${src}" /><br />
</sources><br />
<br />
<property key="sonar.projectName" value="Sonarサンプル" /><br />
<property key="sonar.dynamicAnalysis" value="reuseReports" /><br />
<property key="sonar.cobertura.reportPath" value="${report}/coverage.xml" /><br />
</sonar:sonar><br />
</target><br />
<br />
<target name="clean" description="clean up" ><br />
<delete dir="${build}"/><br />
<delete dir="${instrument}"/><br />
<delete dir="${report}"/><br />
<delete file="cobertura.ser"/><br />
</target><br />
</project><br />
<br />
</source><br />
<br />
<SONAR_HOST_NAME>にSoanrが動作しているホスト名を入力してください。<br />
<br />
テスト用クラスの名前は「~Test」としていることを前提としています。<br />
<br />
Ant書式の参考 :<br />
* http://cobertura.sourceforge.net/anttaskreference.html<br />
* http://ant.apache.org/manual/Tasks/junit.html<br />
<br />
== 実行 ==<br />
<br />
Jenkinsで新規Jobを作成します。Antのターゲットは「compile instrument test report sonar」とします。<br />
<br />
[[ファイル:Ant sonar coverage 01.png|400px]]<br />
<br />
JenkinsでJobを実行します。<br />
<br />
[[ファイル:Ant sonar coverage 02.png|600px]]<br />
<br />
実行後、Sonarのダッシュボードにカバレッジ率が表示されています。<br />
<br />
[[ファイル:Ant sonar coverage 03.png|600px]]<br />
<br />
[[ファイル:Ant sonar coverage 04.png|600px]]<br />
<br />
== 更新履歴 ==<br />
<br />
* ページ作成 -- 2011年5月5日 (木) 21:25 (JST)</div>
Admin
http://www.sdmemo.com/wiki/Ant%E3%81%A7Subversion%E3%81%AE%E3%83%AA%E3%83%93%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E5%8F%96%E5%BE%97
AntでSubversionのリビジョンを取得
2011-04-29T04:57:44Z
<p>Admin: </p>
<hr />
<div>{{Template:Stub}}<br />
<br />
[[Category:ソフトウェア開発]]<br />
<br />
本ページは、AntでSubversionのリビジョンを取得する手順を記述します。Antタスクで成果物をZipファイルにアーカイブする際、ファイル名にリビジョン番号を付与するといった活用ができます。<br />
<br />
== 環境 ==<br />
<br />
* OS : CentOS 5.5<br />
* Ant : 1.8.2<br />
* SVNKit : 1.3.5<br />
* svntask : 1.0.8<br />
<br />
<br />
== インストール ==<br />
<br />
=== Ant ===<br />
<br />
入手先 : http://ant.apache.org/<br />
<br />
$ tar zxvf apache-ant-1.8.2-bin.tar.gz<br />
# mv apache-ant-1.8.2 /usr/local/<br />
<br />
「/usr/local/apache-ant-1.8.2/bin/」をPATHに加えてください。 <br />
<br />
=== SVNKit ===<br />
<br />
SVNKitは、svntaskの実行に必要となるSubversionリポジトリを操作できるライブラリです。ネイティブのSubversionライブラリが無くても、JavaVMのみでSubversionリポジトリを操作できます。<br />
<br />
入手先 : http://svnkit.com/<br />
<br />
$ unzip org.tmatesoft.svn_1.3.5.standalone.zip<br />
# cp svnkit-1.3.5.7406/svnkit.jar /usr/local/apache-ant-1.8.2/lib/<br />
<br />
=== svntask ===<br />
<br />
AntでSubversion操作をするためのライブラリです。svntaskと[http://subclipse.tigris.org/svnant.html SvnAnt]との違いは、svntaskはJavaVMのみでSubversionリポジトリを操作するのに対して、SvnAntはネイティブのSubversionライブラリを必要とする点です。<br />
<br />
入手先 : http://code.google.com/p/svntask/<br />
<br />
$ unzip svntask-1.0.8.zip<br />
# mv svntask-1.0.8/svntask.jar /usr/local/apache-ant-1.8.2/lib/<br />
<br />
== build.xml作成 ==<br />
<br />
build.xmlファイルの例を以下に記述します。<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<project name="sample" default="compile" basedir="."><br />
<description>Sonarサンプル</description><br />
<property environment="env" /><br />
<property name="src" location="src"/><br />
<property name="build" location="bin"/><br />
<property name="dist" location="dist"/><br />
<br />
<target name="init"><br />
<tstamp/><br />
<mkdir dir="${build}"/><br />
</target><br />
<br />
<target name="compile" depends="init" description="compile the source"><br />
<javac srcdir="${src}" destdir="${build}"/><br />
</target><br />
<br />
<target name="dist" depends="init"><br />
<delete dir="${dist}"/><br />
<svn><info path="." revisionProperty="revisionVersion" /></svn><br />
<zip destfile="${dist}/appname-${DSTAMP}-rev${revisionVersion}.zip" basedir="." /> <br />
</target><br />
<br />
<target name="clean" description="clean up" ><br />
<delete dir="${build}"/><br />
</target><br />
</project><br />
</source><br />
<br />
== 実行 ==<br />
<br />
ant dist<br />
<br />
Ant実行後、distディレクトリにリビジョン名の入ったZipファイルができているはずです。<br />
<br />
== 更新履歴 ==<br />
<br />
* ページ作成 -- 2011年4月29日 (金) 13:57 (JST)</div>
Admin
http://www.sdmemo.com/wiki/Android%E3%83%A1%E3%83%A2
Androidメモ
2011-04-16T14:30:17Z
<p>Admin: </p>
<hr />
<div>[[Category:ソフトウェア開発]] [[Category:Java]]<br />
<br />
Android開発関連のメモを残します。<br />
<br />
== Android Test Projectで外部jarのクラスを使用する ==<br />
<br />
テスト対象のプロジェクトで取り込んでいるjarのクラスを使用するために、テストプロジェクトで同じjarをビルドパスに加えると、テスト実行中に以下のようなエラーが表示します。<br />
<br />
<source lang="text"><br />
[2011-09-11 23:13:53 - Sample_Android_Test] Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554<br />
[2011-09-11 23:13:53 - Sample_Android_Test] Collecting test information<br />
[2011-09-11 23:13:55 - Sample_Android_Test] Sending test information to Eclipse<br />
[2011-09-11 23:13:55 - Sample_Android_Test] テストの実行...<br />
[2011-09-11 23:13:57 - Sample_Android_Test] Test run failed: Class ref in pre-verified class resolved to unexpected implementation<br />
[2011-09-11 23:13:57 - Sample_Android_Test] Test run finished<br />
[2011-09-11 23:16:04 - Sample_Android_Test] ------------------------------<br />
</source><br />
<br />
解決するには、テストプロジェクトでjarをビルドバスに加えるのではなく、テスト元プロジェクトのエクスポートするエントリーに該当するjarを追加する必要があります。<br />
<br />
以下の画像を参考にし、エクスポートしたいjarのチェックをONにします。<br />
<br />
[[ファイル:Android unit test jar 00.png|600px]]<br />
<br />
* 環境<br />
** Android SDK Revision 10<br />
** IDE : Eclipse 3.6 (pleiades)<br />
* 参考<br />
** http://dtmilano.blogspot.com/2009/12/android-testing-external-libraries.html<br />
<br />
-- 2011年9月11日 (日) 23:38 (JST)<br />
<br />
== 「Android SDK and AVD Manager」で使用するProxy接続設定をテキストファイルから指定する ==<br />
<br />
ホームディレクトリの「.android」ディレクトリにある「androidtool.cfg」ファイルを以下のように設定します。<br />
<br />
<source lang="text"><br />
### Settings for Android Tool<br />
#Wed Apr 06 16:30:33 JST 2011<br />
http.proxyPort=3128<br />
sdkman.monitor.density=96<br />
http.proxyHost=192.168.1.100<br />
sdkman.show.update.only=true<br />
sdkman.ask.adb.restart=true<br />
sdkman.force.http=true<br />
</source><br />
<br />
ビルドサーバといったGUIを持たないマシンの場合、テキストファイルを直接編集した方が効率的です。<br />
<br />
* 動作環境<br />
** Android SDK r10<br />
<br />
== コマンドラインでAndroid SDKのパッケージをインストールするには ==<br />
<br />
以下コマンドを実行します。<br />
<br />
android update sdk -u<br />
<br />
== 更新履歴 ==<br />
<br />
* [[#Android Test Projectで外部jarのクラスを使用する]]追加 -- 2011年9月11日 (日) 23:38 (JST)<br />
* ページ作成 -- 2011年4月16日 (土) 23:30 (JST)</div>
Admin
http://www.sdmemo.com/wiki/Ant,Jenkins,Sonar%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86
Ant,Jenkins,Sonarの導入手順
2011-04-16T09:54:23Z
<p>Admin: /* FindBugs指摘項目の文字化けを回避する */</p>
<hr />
<div>[[Category:ソフトウェア開発]]<br />
<br />
本ページでは、Javaソフトウェア管理ツール群である、Ant・Jenkins・Sonarの導入手順を記述します。[[Maven,Jenkins,Sonarの導入手順]]と異なるのは、ビルドツールにMavenではなくAntを使用している点です。<br />
<br />
Mavenは、ディレクトリ構成といった各種ルールが予め定義されているため、標準に従えばビルド作業が効率よく行える反面、自由度が低いため融通が利かないという性質があります。Mavenを導入していないプロジェクトに対してSonarによる品質チェックを行いたい場合、Mavenのルールに無理やり適合させて既存の構成を変更してしまうことは得策とは言えません。[http://www.sonarsource.org/sonar-2-6-adds-continuous-inspection-support-for-ant-community/#more-4887 Sonar 2.6]からAntによるビルドでもSonarを使用でるようになりましたので、その手順を記述します。<br />
<br />
参考 : [[Maven,Jenkins,Sonarの導入手順]]<br />
<br />
== 環境 ==<br />
<br />
* OS : CentOS 5.5<br />
* Ant : 1.8.2<br />
* Jenkins : 1.406<br />
* Sonar : 2.7<br />
* Tomcat : 7.0.12<br />
* MySQL : 5.1.54<br />
<br />
== インストール ==<br />
<br />
Jenkins, Tomcat, MySQLのインストール方法は、[[Maven,Jenkins,Sonarの導入手順#インストール]]を参照ください。<br />
<br />
=== Ant ===<br />
<br />
入手先 : http://ant.apache.org/<br />
<br />
$ tar zxvf apache-ant-1.8.2-bin.tar.gz<br />
# mv apache-ant-1.8.2 /usr/local/<br />
<br />
=== Sonar ===<br />
<br />
入手先 : http://www.sonarsource.com/<br />
<br />
$ unzip sonar-2.7.zip<br />
# mv sonar-2.7 /usr/local/<br />
<br />
=== Sonar Ant Task ===<br />
<br />
入手先 : http://docs.codehaus.org/display/SONAR/Analyse+with+ANT<br />
<br />
上記ページからSonar Ant Taskをダウンロードします。<br />
<br />
ダウンロードした「sonar-ant-task-1.0.jar」ファイルを「/usr/local/apache-ant-1.8.2/lib/」に移動します。<br />
<br />
== 設定 ==<br />
<br />
Jenkins, Sonar, Tomcat, MySQLのインストール方法は、[[Maven,Jenkins,Sonarの導入手順#設定]]を参照ください。 <br />
<br />
=== その他 ===<br />
<br />
「ANT_HOME」の環境変数を設定します。<br />
<br />
export ANT_HOME=/usr/local/apache-ant-1.8.2/<br />
<br />
JenkinsがAntのコマンドである「ant」を実行するために、「/usr/local/apache-ant-1.8.2/bin/」をPATHに加えます。<br />
<br />
== 起動 ==<br />
<br />
起動方法は[[Maven,Jenkins,Sonarの導入手順#起動]]を参照ください。 <br />
<br />
== Sonarの品質管理画面を更新 ==<br />
<br />
EclipseでJavaプロジェクトを作成し、Sonarの品質管理画面を更新する場合の手順を記述します。Subversionの使用方法は[[Maven,Jenkins,Sonarの導入手順#Subversionリポジトリを作成する]]を参考にしてください。<br />
<br />
=== Javaプロジェクトの作成 ===<br />
<br />
Javaプロジェクトのルートディレクトリに「build.xml」ファイルを作成します。ファイルの作成例を以下に示します。<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<project name="sample" default="compile" basedir="." xmlns:sonar="antlib:org.sonar.ant"><br />
<description>Sonarサンプル</description><br />
<property environment="env" /><br />
<property name="src" location="src"/><br />
<property name="build" location="bin"/><br />
<br />
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"><br />
<classpath path="${env.ANT_HOME}/lib/sonar-ant-task-1.0.jar" /><br />
</taskdef><br />
<br />
<target name="init"><br />
<tstamp/><br />
<mkdir dir="${build}"/><br />
</target><br />
<br />
<target name="compile" depends="init" description="compile the source"><br />
<javac srcdir="${src}" destdir="${build}" encoding="MS932" /><br />
</target><br />
<br />
<target name="sonar" description="analyze project" ><br />
<sonar:sonar workDir="/tmp/sonar/test00" key="com.example.test00:test00" version="0.1"><br />
<property key="sonar.jdbc.url" value="jdbc:mysql://${env.SONAR_HOST_NAME}:3306/sonar?useUnicode=true&amp;characterEncoding=utf8" /><br />
<property key="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver" /><br />
<property key="sonar.jdbc.username" value="sonar" /><br />
<property key="sonar.jdbc.password" value="sonar" /><br />
<property key="sonar.host.url" value="http://${env.SONAR_HOST_NAME}:8080/sonar" /><br />
<property key="sonar.sourceEncoding" value="MS932" /><br />
<br />
<sources><br />
<path location="${src}" /><br />
</sources><br />
<br />
<property key="sonar.projectName" value="Sonarサンプル" /><br />
<property key="sonar.dynamicAnalysis" value="false" /><br />
</sonar:sonar><br />
</target><br />
<br />
<target name="clean" description="clean up" ><br />
<delete dir="${build}"/><br />
</target><br />
</project><br />
</source><br />
<br />
SonarとMySQLが動作するサーバを環境変数「SONAR_HOST_NAME」から取得します。「SONAR_HOST_NAME」の環境変数を設定します。<br />
<br />
export SONAR_HOST_NAME=<HOST_NAME><br />
<br />
動的な値にする必要が無ければ、環境変数による設定でなくホスト名を直接入力しても問題ありません。<br />
<br />
今回使用したプロジェクトのエンコードは「UTF-8」でなく「MS932」のため、javacのencoding属性、sonar:sonarのproperty要素に「MS932」の記述を追記しています。<br />
<br />
=== Jenkinsでジョブを設定する ===<br />
<br />
最初に、「Jenkinsの管理」->「システムの設定」からAntの設定を行います。 <br />
<br />
[[ファイル:Install sonar ant 01.png|600px]]<br />
<br />
次に、「新規ジョブ作成」からジョブを作成します。 <br />
<br />
[[ファイル:Install sonar ant 02.png|600px]]<br />
<br />
「ソースコード管理システム」と「ビルド」の項目を変更します。 <br />
<br />
[[ファイル:Install sonar ant 03.png|600px]]<br />
<br />
「ビルド実行」を選択すると、ビルドが開始されます。コンソール出力の最後に「Finished: SUCCESS」と表示されていれば、正常に終了しています。 <br />
<br />
[[ファイル:Install sonar ant 04.png|600px]]<br />
<br />
「http://<ホスト名>:8080/sonar」にアクセスすると、「Sonarサンプル」が追加されています。 <br />
<br />
[[ファイル:Install sonar ant 05.png|600px]]<br />
<br />
[[ファイル:Install sonar ant 06.png|600px]]<br />
<br />
== トラブルシューティング ==<br />
<br />
=== Sonar実行時に「org.sonar.squid.api.AnalysisException: Got an exception - unexpected char: 0xXXXX」が表示される ===<br />
<br />
ソースコードのエンコーディングが「MS932」の場合、以下のエラーメッセージが表示されることがあります。<br />
<br />
<source lang="text"><br />
sonar:<br />
[sonar:sonar] Apache Ant(TM) version 1.8.2 compiled on December 20 2010<br />
[sonar:sonar] Sonar Ant Task version: 1.0<br />
[sonar:sonar] Loaded from: file:/usr/local/apache-ant-1.8.2/lib/sonar-ant-task-1.0.jar<br />
[sonar:sonar] Sonar work directory: /tmp/sonar/test00<br />
[sonar:sonar] Sonar server: http://127.0.0.1:8080/sonar<br />
[sonar:sonar] Sonar version: 2.7<br />
[sonar:sonar] [INFO] Database dialect class org.sonar.jpa.dialect.MySql<br />
[sonar:sonar] [INFO] Execution environment: Ant Apache Ant(TM) version 1.8.2 compiled on December 20 2010<br />
[sonar:sonar] [INFO] ------------- Analyzing Sonarサンプル<br />
[sonar:sonar] [INFO] Selected quality profile : [name=Sonar way,language=java]<br />
[sonar:sonar] [INFO] Compare to previous analysis (2011-04-16)<br />
[sonar:sonar] [INFO] Compare over 5 days (2011-04-11, analysis of 2011-04-16 21:02:18.0)<br />
[sonar:sonar] [INFO] Compare over 30 days (2011-03-17, analysis of 2011-04-16 21:02:18.0)<br />
[sonar:sonar] [INFO] Configure maven plugins...<br />
[sonar:sonar] [INFO] Sensor AsynchronousMeasuresSensor...<br />
[sonar:sonar] [INFO] Sensor AsynchronousMeasuresSensor done: 90 ms<br />
[sonar:sonar] [INFO] Sensor SquidSensor...<br />
[sonar:sonar] [INFO] Java AST scan...<br />
<br />
BUILD FAILED<br />
/usr/local/jenkins/jobs/sonar-ant-sample/workspace/sonar-ant-sample/build.xml:22: org.sonar.squid.api.AnalysisException: Got an exception - unexpected char: 0xFFFD, file : /usr/local/jenkins/jobs/sonar-ant-sample/workspace/sonar-ant-sample/src/test/Class00.java, line : 6<br />
at org.sonar.java.ast.CheckstyleAuditListener.addError(CheckstyleAuditListener.java:40)<br />
at com.puppycrawl.tools.checkstyle.Checker.fireErrors(Checker.java:513)<br />
at com.puppycrawl.tools.checkstyle.Checker.process(Checker.java:279)<br />
at org.sonar.java.ast.JavaAstScanner.launchCheckstyleEngine(JavaAstScanner.java:75)<br />
at org.sonar.java.ast.JavaAstScanner.scanFiles(JavaAstScanner.java:138)<br />
at org.sonar.plugins.squid.SquidExecutor.scanSources(SquidExecutor.java:166)<br />
at org.sonar.plugins.squid.SquidExecutor.scan(SquidExecutor.java:87)<br />
at org.sonar.plugins.squid.SquidSensor.analyzeMainSources(SquidSensor.java:78)<br />
at org.sonar.plugins.squid.SquidSensor.analyse(SquidSensor.java:62)<br />
at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:59)<br />
at org.sonar.batch.phases.Phases.execute(Phases.java:75)<br />
at org.sonar.batch.ProjectBatch.execute(ProjectBatch.java:55)<br />
at org.sonar.batch.Batch.analyzeModule(Batch.java:158)<br />
at org.sonar.batch.Batch.analyzeModules(Batch.java:76)<br />
at org.sonar.batch.Batch.execute(Batch.java:62)<br />
at org.sonar.ant.Launcher.executeBatch(Launcher.java:121)<br />
at org.sonar.ant.Launcher.execute(Launcher.java:60)<br />
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
at java.lang.reflect.Method.invoke(Method.java:597)<br />
at org.sonar.ant.SonarTask.delegateExecution(SonarTask.java:167)<br />
at org.sonar.ant.SonarTask.execute(SonarTask.java:151)<br />
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)<br />
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
at java.lang.reflect.Method.invoke(Method.java:597)<br />
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)<br />
at org.apache.tools.ant.Task.perform(Task.java:348)<br />
at org.apache.tools.ant.Target.execute(Target.java:390)<br />
at org.apache.tools.ant.Target.performTasks(Target.java:411)<br />
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)<br />
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)<br />
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)<br />
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)<br />
at org.apache.tools.ant.Main.runBuild(Main.java:809)<br />
at org.apache.tools.ant.Main.startAnt(Main.java:217)<br />
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)<br />
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)<br />
<br />
Total time: 6 seconds<br />
Finished: FAILURE<br />
</source><br />
<br />
原因は、CheckStyleが文字コードを正しく認識していないためであると想定します。CheckStyleに文字コードを認識させるためには、「build.xml」で「sonar.sourceEncoding」を指定する必要があります。<br />
<br />
ちなみに、本エラーはWindows 7でAntビルドを手動で行った時には発生しませんでした。CentOS 5.5の標準文字コードがUTF-8であるので、標準文字コードとソースコードの文字コードが異なる場合に本事象が発生すると想定します。<br />
<br />
参考 : [http://docs.codehaus.org/display/SONAR/Advanced+parameters Advanced parameters - Sonar]<br />
<br />
== FindBugs指摘項目の文字化けを回避する ==<br />
<br />
FindBugsの日本語向けメッセージファイルである「message_ja.xml」がSHIFT_JISであるためか、Sonarの画面では、FindBugsの指摘項目が文字化けして表示されます。警告箇所をクリックすると、英語で解説が表示されますので大体の問題点は把握できますが、このままでは使いづらいので暫定回避策を記述します。<br />
<br />
Sonarのバージョンは2.13前提です。<br />
<br />
* Sonar展開先のFindBugsプラグイン「sonar-findbugs-plugin-2.13.jar」を取得する<br />
** 例 : /usr/local/sonar-2.13/lib/core-plugins/sonar-findbugs-plugin-2.13.jar<br />
* sonar-findbugs-plugin-2.13.jar を展開し、FindBugs本体「findbugs-1.3.9.jar」を取得する<br />
* findbugs-1.3.9.jar を展開し、メッセージファイル「message_ja.xml」の文字コードをSHIFT_JISからUTF-8に変換する<br />
** 同時に、ルート要素のencordingプロパティを「UTF-8」とする<br />
* 「sonar-findbugs-plugin-2.13.jar」を作成し直し、元のファイルと置き換える<br />
* '''Sonarタスクを再実行する''' (再実行しないと文字化けしたままです)<br />
<br />
<br />
少々手間がかかりますが、これで文字化けせずに日本語の指摘項目が表示されます。Sonar側で簡単に回避できる方法が分かれば追記します。<br />
<br />
-- 2012年2月12日 (日) 19:10 (JST)<br />
<br />
== 参考 ==<br />
<br />
* http://docs.codehaus.org/display/SONAR/Analyse+with+ANT<br />
<br />
== 更新履歴 ==<br />
* 「[[#FindBugs指摘項目の文字化けを回避する]]」追加 -- 2012年2月12日 (日) 19:11 (JST)<br />
* ページ作成 -- 2011年4月16日 (土) 18:54 (JST)</div>
Admin
http://www.sdmemo.com/wiki/Windows2003%E3%83%A1%E3%83%A2
Windows2003メモ
2011-03-29T00:24:57Z
<p>Admin: ページの作成: Category:Tips == ログイン時「ドメインに接続できません。」が出る場合の対処方法 == Active Directoryに参加しているWindows 2003 Server R2...</p>
<hr />
<div>[[Category:Tips]]<br />
<br />
<br />
== ログイン時「ドメインに接続できません。」が出る場合の対処方法 ==<br />
<br />
Active Directoryに参加しているWindows 2003 Server R2において、ログイン時に以下のメッセージが発生した場合の対処方法を記述します。<br />
<br />
<source lang="text"><br />
ドメインに接続できません。ドメイン コントローラがダウンしているか利用できない状態になっている、<br />
またはコンピュータ アカウントが見つからなかったことが原因として考えられます。<br />
後からもう一度やり直してください。このメッセージが引き続き表示される場合は、<br />
システム管理者に連絡してください。<br />
</source><br />
<br />
[[ファイル:Windows 2003 r2 active directoty login.png|600px]]<br />
<br />
私の環境では、上記メッセージは以下の作業をした後に表示されるようになりました。<br />
<br />
* Virtual Server 2005 R2で稼働している仮想マシン(Windows 2003 Server R2)のハードディスクイメージをバックアップ<br />
* 仮想マシンをドメインから離脱させる<br />
* バックアップしていた仮想マシンを復元し、ログインを施行<br />
<br />
<br />
対処手順は以下の通りです。<br />
<br />
* 以下いずれかの手順でログインする<br />
** ローカルアカウントでログイン<br />
** ネットワークアダプタをダウンさせる等をし、Active Directoryサーバに接続されていない状態で、Active Directoryドメインユーザでログインする<br />
*** ただし、事前にログインしたことがあるドメインユーザである必要がある<br />
* ドメインからワークグループへ抜ける<br />
* 再起動する<br />
* ローカルアカウントでログイン後、再度ドメインに参加する<br />
<br />
== 更新履歴 ==<br />
<br />
* ページ作成 -- 2011年3月29日 (火) 09:24 (JST)</div>
Admin
http://www.sdmemo.com/wiki/%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%AF%94%E8%BC%83
バージョン管理システム比較
2011-03-19T12:02:03Z
<p>Admin: /* 補足資料 */</p>
<hr />
<div>{{Stub}}<br />
<br />
[[Category:ソフトウェア開発]]<br />
<br />
本ページは、各バージョン管理システムをソフトウェア開発基盤として使用する場合の特徴を比較した内容を記述します。取り上げるバージョン管理システムは、最もメジャーなSubversion、そして分散バージョン管理システムであるGit、Mercirual、Bazaarです。<br />
<br />
2011年3月現在、私が構築しているソースコードと仕様書のバージョン管理システムにはSubversionを使用しています。本ページは、分散バージョン管理システムに移行できるかの判断材料として使用します。<br />
<br />
== 前提条件 ==<br />
<br />
* 管理対象<br />
** ソースコード<br />
*** ファイル名・ディレクトリ名は半角英数字のみ<br />
*** テキストファイル<br />
** 仕様書<br />
*** ファイル名・ディレクトリ名は日本語を含む<br />
*** 基本的にはバイナリファイル(Microsoft Excel等)<br />
* OS : Windows 7 Enterprise 64bit (32bitも可)<br />
* 使用するIDE<br />
** Visual Studio 2010 Profesional : C#<br />
** Pleiades All in One 3.6.2.20110228 : Java<br />
* GUIフロントエンドを優先的に使用<br />
<br />
== 比較対象 ==<br />
<br />
* Subversion<br />
** TortoiseSVN-1.6.14.21012-x64-svn-1.6.16.msi<br />
*** http://tortoisesvn.tigris.org/<br />
* Git<br />
** Git-1.7.4-preview20110204.exe<br />
*** http://git-scm.com/<br />
** Tortoisegit-1.6.5.0-64bit.msi<br />
*** http://code.google.com/p/tortoisegit/<br />
* Mercurial<br />
** TortoiseHg 2.0.2 with Mercurial 1.8.1 - x64 Windows<br />
*** http://mercurial.selenic.com/<br />
* Bazaar<br />
** bzr 2.3.1(Standalone版インストール)<br />
*** http://bazaar.canonical.com/en/<br />
<br />
== 分散バージョン管理システムのメリット ==<br />
<br />
あくまで私の主観です。<br />
<br />
* 中央リポジトリからの独立したバージョン管理<br />
** 他人はまだ公開したくないが、一時的にコミットをしたい状況に対応<br />
* 他リポジトリと常時に繋がっている必要が無い<br />
** 外出する際に持ち出したデータに対してもバージョン管理ができる<br />
<br />
マージの容易性に関しては、そのような機会が少ないので、個人的にメリットを享受するまでに至っていません。<br />
<br />
== 比較結果 ==<br />
<br />
=== Subversion連携 ===<br />
<br />
Subversionを親リポジトリとして使用する場合の、使用ツール(プラグイン)およびコマンド例を記述します。<br />
<br />
* Git<br />
** git-svn(Gitインストール時に付属)<br />
** クローン時のコマンド(例) :<br />
*** git svn clone svn://localhost:8001/test01<br />
* Mercurial<br />
** hgsubversionをインストール<br />
* Bazaar<br />
** チェックアウト・コミット・プッシュは、特にSubversionであることを意識せず操作可能<br />
<br />
<br />
特記事項<br />
* Gitのクローン時のコマンドを「git svn clone file:///c:/work/svn-repos」とすると、「(前略)Expected FS format '2'; found format '4'(以下略)」と出て操作が失敗します。git-svnで扱えるSubversionファイルシステムのバージョンが古いためにエラーが出たと推測します。<br />
* Mercurialのクローン元URLを「C:\...」と指定すると失敗するので「file:///C:/...」とする必要があります。<br />
<br />
=== バイナリファイルに対する操作性 ===<br />
<br />
バージョン管理されているバイナリ(非テキスト)ファイルの、過去の履歴を閲覧するときの操作性に関する比較です。<br />
<br />
* Git<br />
** TortoiseGitの「Show log」画面の下部から、過去のバイナリファイルを関連付けされたアプリケーションで直接開ける<br />
** UIがTortoiseSVNに近い<br />
* Mercurial<br />
** 過去のバイナリファイルはWindowsメモ帳でしか開けない。<br />
*** メモ帳で開いたファイルをそのまま保存してもファイルが破損していて開けない。<br />
** リビジョンごとのエクスポートで代替するしかない<br />
* Bazaar<br />
** QBzrの履歴の「ファイル表示」を選択しても、専用ビューアが開き、外部保存および関連付けされたアプリケーションによる表示はできない<br />
<br />
=== 日本語ファイル名・ディレクトリ名の取り扱い可否 ===<br />
<br />
Subversionでは特に問題なく使用できた日本語ファイル名・ディレクトリ名が、特にGit・Mercurialでは問題が出てきます。<br />
<br />
調査がかなり中途半端なので、後日追加調査します。<br />
<br />
* Git<br />
** ディレクトリ名は文字化けする<br />
*** 影響範囲は要調査<br />
** ファイル名は問題無し<br />
* Mercurial<br />
** 日本語ディレクトリの取り扱い不可<br />
*** コミット時、「abort: 指定されたパスが見つかりません。」と表示される。<br />
*** RedmineからMercurialリポジトリ参照時、日本語ファイル名に対する履歴が取得できない<br />
**** [[Redmineの導入手順#日本語ファイル名を含むファイルの履歴が表示されない]]参照<br />
* Bazaar<br />
** 特に問題なし<br />
** エラー発生時のダイアログ(何のエラーかは失念)に出力されるメッセージに含まれる日本語パスが文字化けしているが、影響不明<br />
<br />
=== 日本語を含む作業用ディレクトリ名 ===<br />
<br />
(調査中)<br />
<br />
=== IDE連携 ===<br />
<br />
(調査中)<br />
<br />
{| class="wikitable"<br />
! 名前<br />
! Visual Studio 2010<br />
! Eclipse 3.6 (pleiades)<br />
! 備考<br />
|-<br />
! Subversion || || ||<br />
|-<br />
! Git || || ||<br />
|-<br />
! Mercurial|| || ||<br />
|-<br />
! Bazaar || || ||<br />
|}<br />
<br />
=== その他 ===<br />
<br />
特になし。<br />
<br />
== 前提条件を満たす散バージョン管理システム ==<br />
<br />
=== ソースコード管理 ===<br />
* Visual Studio 2010<br />
** (調査中)<br />
* Eclipse 3.6<br />
** (調査中)<br />
<br />
=== 仕様書管理 ===<br />
<br />
GUIフロントエンドからの過去のバイナリファイルの取得ができ、かつ日本語ファイル名・ディレクトリ名の取り扱いができる分散バージョン管理システムはありません。よって、Subversionが最も適しています。<br />
<br />
== まとめ ==<br />
<br />
(考察中)<br />
<br />
== 参考資料 ==<br />
<br />
=== RedmineとBazaarを組み合わせて過去のバイナリファイルを取得する ===<br />
<br />
RedmineとBazaarを組み合わせることにより、過去のバイナリファイルの取得と日本語ファイル名・ディレクトリ名の取り扱いが可能となります。<br />
<br />
ただし、常にRedmineにアクセスできる環境が必要となります。<br />
<br />
[[ファイル:Compare version control 01.png|600px]]<br />
<br />
Bazaarの設定。<br />
<br />
[[ファイル:Compare version control 02.png|600px]]<br />
<br />
Windowsからファイルをコミット。文字化けは回避しています。<br />
<br />
[[ファイル:Compare version control 03.png|600px]]<br />
<br />
ダウンロードもできます。<br />
<br />
== QBzrでファイルの保存をするためのパッチ ==<br />
<br />
BazaarのGUIフロントエンドであるBazaar Explorer(QBzr)には、ファイルを保存するための機能がありません。暫定処理ではありますが、QBzrのソースコードを書き換えて保存する機能を加えました。その時のdiffは以下となります。<br />
<br />
注意 : 私はPython、PyQt等の開発作法を理解していません。もしかしたらリソースリーク等が発生するかもしれません。<br />
<br />
編集するファイルは「<Bazaarホーム>\plugins\qbzr\lib\cat.py」です。<br />
<br />
<source lang="diff"><br />
=== 変更 ファイル cat.py<br />
--- cat.py 2011-03-20 17:11:57 +0000<br />
+++ cat.py 2011-03-20 17:22:16 +0000<br />
@@ -86,6 +86,11 @@<br />
<br />
self.throbber = ThrobberWidget(self)<br />
self.buttonbox = self.create_button_box(BTN_CLOSE)<br />
+ self.save_button = QtGui.QPushButton("Save(&S)", self)<br />
+ self.connect(self.save_button,<br />
+ QtCore.SIGNAL("clicked()"),<br />
+ self.save_file)<br />
+ <br />
self.encoding_selector = self._create_encoding_selector()<br />
<br />
self.vbox = QtGui.QVBoxLayout(self.centralwidget)<br />
@@ -94,6 +99,7 @@<br />
<br />
hbox = QtGui.QHBoxLayout()<br />
hbox.addWidget(self.encoding_selector)<br />
+ hbox.addWidget(self.save_button)<br />
hbox.addWidget(self.buttonbox)<br />
self.vbox.addLayout(hbox)<br />
<br />
@@ -110,7 +116,21 @@<br />
# we show the bare form as soon as possible.<br />
QBzrWindow.show(self)<br />
QtCore.QTimer.singleShot(0, self.load)<br />
- <br />
+<br />
+ def save_file(self):<br />
+ filePath = QtGui.QFileDialog(self, QtCore.Qt.Dialog).getSaveFileName(self, "Save File", self.filename)<br />
+ if not filePath:<br />
+ return<br />
+ <br />
+ file = QtCore.QFile(filePath)<br />
+ file.open(QtCore.QIODevice.WriteOnly)<br />
+ <br />
+ try:<br />
+ file.write(self.text)<br />
+ finally:<br />
+ file.flush<br />
+ file.close<br />
+<br />
@runs_in_loading_queue<br />
@ui_current_widget<br />
@reports_exception()<br />
<br />
</source><br />
<br />
[[ファイル:Compare version control 04.png|600px]]<br />
<br />
左下に「Save」ボタンが追加され、クリック時にファイルダイアログが表示されます。<br />
<br />
== 更新履歴 ==</div>
Admin
http://www.sdmemo.com/wiki/Review_Board%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86
Review Boardの導入手順
2011-02-19T15:41:37Z
<p>Admin: /* Apache */</p>
<hr />
<div>[[Category:ソフトウェア開発]][[Category:導入手順]]<br />
<br />
本ページでは、ソースコードレビューツールであるReview Boardの導入手順を記述します。<br />
<br />
== 要件 ==<br />
* バージョン管理はSubversionを使用<br />
* Review BoardのDBはMySQLを使用<br />
<br />
== 環境 ==<br />
<br />
* OS : CentOS 5.5<br />
* Review Board : 1.5.3<br />
* Apache : 2.2.17<br />
* Python : 2.7.1<br />
* setuptools : 0.6c11<br />
* pysvn : 1.7.2<br />
* modwsgi : 3.3<br />
* MySQL : 5.1.54<br />
* Subversion : 1.6.15<br />
<br />
== インストール ==<br />
<br />
=== MySQL ===<br />
<br />
入手先 : http://www.mysql.com/<br />
<br />
<source lang="text"><br />
$ tar zxvf mysql-5.1.54.tar.gz<br />
$ cd mysql-5.1.54<br />
$ ./configure<br />
$ make<br />
# make install<br />
</source><br />
<br />
MySQLインストール後、共有ライブラリとして認識させるために「/etc/ld.so.conf」に以下の行を追記します。<br />
<br />
<source lang="text"><br />
/usr/local/lib/mysql<br />
</source><br />
<br />
共有ライブラリリストを更新するために以下を実行します。<br />
<br />
<source lang="text"><br />
# /sbin/ldconfig<br />
</source><br />
<br />
=== Apache ===<br />
<br />
入手先 : http://httpd.apache.org/<br />
<br />
<source lang="text"><br />
$ tar zxvf httpd-2.2.17.tar.gz<br />
$ cd neon-0.29.5<br />
$ ./configure --enable-dav<br />
$ make<br />
# make install<br />
</source><br />
<br />
「--enable-dav」はSubversionインストール時に導入されるモジュール「dav_svn_module」を動作させるために必要です。<br />
<br />
=== Python ===<br />
<br />
入手先 : http://www.python.org/<br />
<br />
<source lang="text"><br />
$ tar jxvf Python-2.7.1.tar.bz2<br />
$ cd Python-2.7.1<br />
$ ./configure --enable-shared<br />
$ make<br />
# make install<br />
</source><br />
<br />
=== setuptools ===<br />
<br />
Pythonパッケージをダウンロード、ビルド、インストールおよび管理をするツールであるEasy Installを使用するため、setuptoolsを導入します。<br />
<br />
入手先 : http://pypi.python.org/pypi/setuptools/0.6c11<br />
<br />
Pythonインストール後、「libpython2.7.so.1.0」を共有ライブラリとして認識させるために「/etc/ld.so.conf」に以下の行を追記します。<br />
<br />
<source lang="text"><br />
/usr/local/lib<br />
</source><br />
<br />
共有ライブラリリストを更新するために以下を実行します。<br />
<br />
<source lang="text"><br />
# /sbin/ldconfig<br />
</source><br />
<br />
setuptoolsをインストールします。<br />
<br />
<source lang="text"><br />
# sh setuptools-0.6c11-py2.7.egg<br />
</source><br />
<br />
=== neon ===<br />
<br />
後述するSubversionに必要なライブラリであるneonをインストールします。<br />
<br />
入手先 : http://www.webdav.org/neon/<br />
<br />
<source lang="text"><br />
$ tar zxvf neon-0.29.5.tar.gz <br />
$ cd httpd-2.2.17<br />
$ ./configure<br />
$ make<br />
# make install<br />
</source><br />
<br />
=== SQLite Amalgamation ===<br />
<br />
後述するSubversionに必要となるSQLiteのソースコードをダウンロードします。SQLite Amalgamationのダウンロード後の手順はSubversionの項で記述します。<br />
<br />
入手先 : http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz<br />
<br />
=== Subversion ===<br />
<br />
入手先 : http://subversion.tigris.org/<br />
<br />
<source lang="text"><br />
$ tar jxvf subversion-1.6.15.tar.bz2<br />
$ tar zxvf sqlite-amalgamation-3.6.13.tar.gz <br />
$ mv sqlite-3.6.13/ subversion-1.6.15/sqlite-amalgamation<br />
$ cd subversion-1.6.15<br />
$ ./configure<br />
$ make<br />
# make install<br />
</source><br />
<br />
=== pysvn ===<br />
<br />
Review BoardでSubversionを利用するためのPythonモジュールであるpysvnをインストールします。<br />
<br />
入手先 : http://pysvn.tigris.org/<br />
<br />
<source lang="text"><br />
$ tar zxvf pysvn-1.7.2.tar.gz<br />
$ cd pysvn-1.7.2/Source<br />
$ python setup.py backport<br />
$ python setup.py configure --apr-inc-dir=/usr/local/apache2/include/ --apr-lib-dir=/usr/local/apache2/lib/<br />
$ make<br />
# mkdir /usr/local/lib/python2.7/site-packages/pysvn<br />
# cp pysvn/__init__.py /usr/local/lib/python2.7/site-packages/pysvn<br />
# cp pysvn/_pysvn_2_7.so /usr/local/lib/python2.7/site-packages/pysvn<br />
</source><br />
<br />
=== modwsgi ===<br />
<br />
ApacheとPythonを連携させるためのモジュールであるmodwsgiをインストールします。<br />
<br />
入手先 : http://code.google.com/p/modwsgi/<br />
<br />
<source lang="text"><br />
$ tar zxvf mod_wsgi-3.3.tar.gz<br />
$ cd mod_wsgi-3.3<br />
$ ./configure --with-apxs=/usr/local/apache2/bin/apxs<br />
$ make<br />
# make install<br />
</source><br />
<br />
=== Review Board ===<br />
<br />
Easy Installを使用して、Review Boardをインストールします。同時に、Review Boardのコマンドラインツールである「RBTools」もインストールします。<br />
<br />
<source lang="text"><br />
# easy_install ReviewBoard<br />
# easy_install RBTools<br />
</source><br />
<br />
=== その他 ===<br />
<br />
PythonでMySQLを利用するためのライブラリをインストールします。<br />
<br />
<source lang="text"><br />
# easy_install mysql-python<br />
</source><br />
<br />
== 設定 ==<br />
<br />
=== MySQL ===<br />
<br />
ユーザ「mysql」を作成し、DBを初期化します。<br />
<br />
<source lang="sql"><br />
# /usr/sbin/useradd mysql<br />
# /usr/local/bin/mysql_install_db --user=mysql<br />
</source><br />
<br />
DBを起動し、rootのパスワードを設定します。<br />
<br />
<source lang="sql"><br />
# /usr/local/bin/mysqld_safe --user=mysql &<br />
# /usr/local/bin/mysqladmin -u root password <password><br />
</source><br />
<br />
Sonarでアクセスするためのユーザ(reviewboard)とパスワード(reviewboard)を作成し、DB(reviewboard)を作成します。<br />
<br />
<source lang="sql"><br />
# mysql -u root -p<br />
</source><br />
<br />
<source lang="sql"><br />
mysql> grant all privileges on *.* to reviewboard@localhost identified by 'reviewboard' with grant option;<br />
mysql> create database reviewboard default character set utf8;<br />
</source><br />
<br />
<br />
=== Review Board ===<br />
<br />
レビュー用のサイトを構築します。<br />
<br />
<source lang="text"><br />
# rb-site install /var/lib/reviewboard<br />
</source><br />
<br />
対話形式の設定を行います。補足説明を「#」を先頭文字として記述しています。<br />
<br />
<source lang="text"><br />
* Welcome to the Review Board site installation wizard<br />
<br />
This will prepare a Review Board site installation in:<br />
<br />
/var/lib/reviewboard<br />
<br />
We need to know a few things before we can prepare your site for<br />
installation. This will only take a few minutes.<br />
<br />
<br />
* Make sure you have the modules you need<br />
<br />
Depending on your installation, you may need certain Python<br />
modules and servers that are missing.<br />
<br />
If you need support for any of the following, you will need to<br />
install the necessary modules and restart the install.<br />
<br />
Databases (optional):<br />
* PostgreSQL (psycopg2)<br />
<br />
<br />
* What's the host name for this site?<br />
<br />
This should be the fully-qualified host name without the http://,<br />
port or path.<br />
<br />
Domain Name: hostname # ホスト名を入力<br />
<br />
<br />
* What URL path points to Review Board?<br />
<br />
Typically, Review Board exists at the root of a URL. For example,<br />
http://reviews.example.com/. In this case, you would specify "/".<br />
<br />
However, if you want to listen to, say,<br />
http://example.com/reviews/, you can specify "/reviews/".<br />
<br />
Note that this is the path relative to the domain and should not<br />
include the domain name.<br />
<br />
The default is /<br />
<br />
Root Path [/]:<br />
<br />
<br />
* What URL will point to the media files?<br />
<br />
While most installations distribute media files on the same server<br />
as the rest of Review Board, some custom installs may instead have<br />
a separate server for this purpose.<br />
<br />
The default is media/<br />
<br />
Media URL [media/]:<br />
<br />
<br />
* What database type will you be using?<br />
<br />
You can type either the name or the number from the list below.<br />
<br />
(1) mysql<br />
(2) sqlite3<br />
<br />
Database Type: 1 # mysqlを選択<br />
<br />
<br />
* What database name should Review Board use?<br />
<br />
You may need to create this database and grant a user modification<br />
rights before continuing.<br />
<br />
The default is reviewboard<br />
<br />
Database Name [reviewboard]:<br />
<br />
<br />
* What is the database server's address?<br />
<br />
This should be specified in hostname:port form. The port is<br />
optional if you're using a standard port for the database type.<br />
<br />
The default is localhost<br />
<br />
Database Server [localhost]:<br />
<br />
<br />
* What is the login and password for this database?<br />
<br />
This must be a user that has creation and modification rights on<br />
the database.<br />
<br />
Database Username: reviewboard<br />
<br />
Database Password:<br />
<br />
<br />
* What cache mechanism should be used?<br />
<br />
memcached is strongly recommended. Use it unless you have a good<br />
reason not to.<br />
<br />
You can type either the name or the number from the list below.<br />
<br />
(1) memcached<br />
(2) file<br />
<br />
Cache Type: 2 # memchachedは未インストールなので、fileを選択<br />
<br />
<br />
* Where should the temporary cache files be stored?<br />
<br />
The default is /tmp/reviewboard_cache<br />
<br />
Cache Directory [/tmp/reviewboard_cache]:<br />
<br />
<br />
* What web server will you be using?<br />
<br />
You can type either the name or the number from the list below.<br />
<br />
(1) apache<br />
(2) lighttpd<br />
<br />
Web Server: 1 # apache指定<br />
<br />
<br />
* What Python loader module will you be using?<br />
<br />
Based on our experiences, we recommend using modpython with Review<br />
Board.<br />
<br />
You can type either the name or the number from the list below.<br />
<br />
(1) modpython<br />
(2) fastcgi<br />
(3) wsgi<br />
<br />
Python Loader: 3 # wsgiを指定<br />
<br />
<br />
* Create an administrator account<br />
<br />
To configure Review Board, you'll need an administrator account.<br />
It is advised to have one administrator and then use that account<br />
to grant administrator permissions to your personal user account.<br />
<br />
If you plan to use NIS or LDAP, use an account name other than<br />
your NIS/LDAP account so as to prevent conflicts.<br />
<br />
The default is admin<br />
<br />
Username [admin]: # Review Boardの管理者用ユーザを指定<br />
<br />
Password: # パスワードを入力<br />
<br />
E-Mail Address: test@example.com # メールアドレスを入力<br />
<br />
<br />
* Installing the site...<br />
<br />
(以下省略)<br />
</source><br />
<br />
<br />
=== Apache ===<br />
<br />
「/usr/local/apache2/conf/httpd.conf」を編集します。<br />
<br />
DocumentRootを以下に変更します。<br />
<source lang="text"><br />
# DocumentRoot "/usr/local/apache2/htdocs"<br />
DocumentRoot "/var/lib/reviewboard/htdocs"<br />
</source><br />
<br />
以下を追記します。<br />
<source lang="text"><br />
LoadModule wsgi_module modules/mod_wsgi.so<br />
<br />
ErrorDocument 500 /errordocs/500.html<br />
<br />
WSGIPassAuthorization On<br />
WSGIScriptAlias "/" "/var/lib/reviewboard/htdocs/reviewboard.wsgi"<br />
<br />
<Directory "/var/lib/reviewboard/htdocs"><br />
Options Indexes FollowSymLinks<br />
AllowOverride None<br />
Order allow,deny<br />
Allow from all<br />
</Directory><br />
<br />
Alias /media "/var/lib/reviewboard/htdocs/media"<br />
Alias /errordocs "/var/lib/reviewboard/htdocs/errordocs"<br />
</source><br />
<br />
<br />
== 起動 ==<br />
<br />
=== MySQL ===<br />
<br />
# /usr/local/bin/mysqld_safe --user=mysql &<br />
<br />
=== Apache ===<br />
<br />
# /usr/local/apache2/bin/apachectl start<br />
<br />
ブラウザによる初回アクセス時、ログインユーザ名・パスワードを聞かれますので、管理者用のアカウントでログインします。<br />
<br />
[[ファイル:Install reviewboard01.png|600px]]<br />
<br />
ユーザ情報を記入するページに遷移します。姓名を記入しても良いですし、空欄のままでもOKです。<br />
<br />
[[ファイル:Install reviewboard02.png|600px]]<br />
<br />
ダッシュボードが表示されます。<br />
<br />
[[ファイル:Install reviewboard03.png|600px]]<br />
<br />
== Review Boardの設定 ==<br />
<br />
=== Subversionリポジトリを参照する ===<br />
<br />
[Admin]->[Database]->[Repositories]の右にある[Add]を選択します。<br />
<br />
[[ファイル:Install reviewboard04.png|600px]]<br />
<br />
以下のように入力します。Subversionリポジトリを「file:///var/lib/svn/reviewboard_test」としています。<br />
<br />
[[ファイル:Install reviewboard05.png|600px]]<br />
<br />
「The repository "Test Repository" was added successfully.」と表示されればOKです。<br />
<br />
[[ファイル:Install reviewboard06.png|600px]]<br />
<br />
Subversion作業リポジトリの変更点をレビュー要請するためのコマンドである「post-review」の使用方法については、[http://www.reviewboard.org/docs/manual/dev/users/tools/post-review/ こちら(英語)]を参考にしてください。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== Apache起動時にエラーが発生する ===<br />
<br />
以下のエラーが発生した場合は、Apacheのconfigureオプションを「--enable-dav」としているかを確認してください。<br />
<br />
<source lang="text"><br />
httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_dav_svn.so into server: /usr/local/apache2/modules/mod_dav_svn.so: undefined symbol: dav_register_provider<br />
</source><br />
<br />
=== mod_wsgiでコンパイルエラーが発生する ===<br />
<br />
make時に以下のエラーが発生した場合は、pythonのshared libraryが存在しないかもしれません。pythonのconfigureオプションを「--enable-shared」としているかを確認してください。<br />
<br />
<br />
<source lang="text"><br />
$ make<br />
/usr/local/apache2/bin/apxs -c -I/usr/local/include/python2.7 -DNDEBUG mod_wsgi.c -L/usr/local/lib -L/usr/local/lib/python2.7/config -lpython2.7 -lpthread -ldl -lutil -lm<br />
/usr/local/apache2/build/libtool --silent --mode=compile gcc -prefer-pic -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/usr/local/apache2/include -I/usr/local/apache2/include -I/usr/local/apache2/include -I/usr/local/include/python2.7 -DNDEBUG -c -o mod_wsgi.lo mod_wsgi.c && touch mod_wsgi.slo<br />
/usr/local/apache2/build/libtool --silent --mode=link gcc -o mod_wsgi.la -rpath /usr/local/apache2/modules -module -avoid-version mod_wsgi.lo -L/usr/local/lib -L/usr/local/lib/python2.7/config -lpython2.7 -lpthread -ldl -lutil -lm<br />
/usr/bin/ld: /usr/local/lib/libpython2.7.a(node.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC<br />
/usr/local/lib/libpython2.7.a: could not read symbols: Bad value<br />
collect2: ld returned 1 exit status<br />
apxs:Error: Command failed with rc=65536<br />
.<br />
make: *** [mod_wsgi.la] エラー 1<br />
</source><br />
<br />
参考 : http://code.google.com/p/modwsgi/wiki/InstallationIssues<br />
<br />
=== rb-site install実行時、使用DBにMySQLを選択できない ===<br />
<br />
「rb-site install」install時、以下のメッセージが表示され、mysql-pythonモジュールをインストールしているにもかかわらず、MySQLが選択できない場合があります。<br />
<br />
<source lang="text"><br />
* Make sure you have the modules you need<br />
<br />
Depending on your installation, you may need certain Python<br />
modules and servers that are missing.<br />
<br />
If you need support for any of the following, you will need to<br />
install the necessary modules and restart the install.<br />
<br />
Databases (optional):<br />
* MySQL (MySQLdb)<br />
* PostgreSQL (psycopg2)<br />
</source><br />
<br />
pythonコマンドでMySQLdbモジュールをコールすると、エラーが表示されます。<br />
<br />
<source lang="text"><br />
# python<br />
Python 2.7.1 (r271:86832, Feb 19 2011, 21:31:55)<br />
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2<br />
Type "help", "copyright", "credits" or "license" for more information.<br />
>>> __import__("MySQLdb")<br />
Traceback (most recent call last):<br />
File "<stdin>", line 1, in <module><br />
File "build/bdist.linux-x86_64/egg/MySQLdb/__init__.py", line 19, in <module><br />
<br />
File "build/bdist.linux-x86_64/egg/_mysql.py", line 7, in <module><br />
File "build/bdist.linux-x86_64/egg/_mysql.py", line 6, in __bootstrap__<br />
ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory<br />
>>><br />
</source><br />
<br />
解決方法は、「libmysqlclient_r.so.16」を共有ライブラリとして読み込ませることです。手順は、MySQLインストールの項を参照してください。<br />
<br />
== 更新履歴 ==<br />
<br />
* ページ作成 -- 2011年2月20日 (日) 00:41 (JST)</div>
Admin
http://www.sdmemo.com/wiki/Maven,Jenkins,Sonar%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86
Maven,Jenkins,Sonarの導入手順
2011-02-06T14:44:53Z
<p>Admin: </p>
<hr />
<div>[[Category:ソフトウェア開発]][[Category:導入手順]]<br />
<br />
本ページでは、Javaソフトウェア管理ツール群である、Maven・Jenkins・Sonarの導入手順を記述します。本ページのゴールは、取り上げる3つのツールを組み合わせることにより、複数人で開発しているソフトウェアの品質をリアルタイムで確認できる環境を得ることです。<br />
<br />
Sonarを動作させるには、1GByteを超えるメモリ容量が必要になります。<br />
<br />
※MavenでなくAntを使用する場合は、[[Ant,Jenkins,Sonarの導入手順]]を参照してください。<br />
<br />
== 環境 ==<br />
<br />
* OS : CentOS 5.5<br />
* Maven : 3.0.2<br />
* Jenkins : 1.396<br />
* Sonar : 2.5<br />
* Tomcat : 7.0.8<br />
* MySQL : 5.1.54<br />
<br />
APサーバとDBサーバは、パフォーマンスと管理のしやすさの観点から、JenkinsとSonar内蔵されている物を使用せず、TomcatとMySQLを使用します。<br />
<br />
== インストール ==<br />
<br />
=== Tomcat ===<br />
<br />
入手先 : http://tomcat.apache.org/<br />
<br />
$ tar zxvf apache-tomcat-7.0.8.tar.gz<br />
# mv apache-tomcat-7.0.8 /usr/local/<br />
<br />
<br />
=== Maven ===<br />
<br />
入手先 : http://maven.apache.org/<br />
<br />
$ tar zxvf apache-maven-3.0.2-bin.tar.gz<br />
# mv apache-maven-3.0.2 /usr/local/<br />
<br />
=== Sonar ===<br />
<br />
入手先 : http://www.sonarsource.com/<br />
<br />
$ unzip sonar-2.5.zip<br />
# mv sonar-2.5 /usr/local/<br />
<br />
WARファイル生成のために必要なライブラリが不足しているので、[http://repo2.maven.org/maven2/org/apache/ant/ant-nodeps/1.7.0/ant-nodeps-1.7.0.jar ant-nodeps-1.7.0.jar]をダウンロードし、「 /usr/local/sonar-2.5/war/apache-ant-1.7.0/lib/」に保存します。<br />
<br />
参考 : http://jira.codehaus.org/browse/SONAR-2109<br />
<br />
=== MySQL ===<br />
<br />
入手先 : http://www.mysql.com/<br />
<br />
$ tar zxvf mysql-5.1.54.tar.gz<br />
$ cd mysql-5.1.54<br />
$ ./configure<br />
$ make<br />
# make install<br />
<br />
=== Jenkins ===<br />
<br />
入手先 : http://jenkins-ci.org/<br />
<br />
# cp jenkins.war /usr/local/apache-tomcat-7.0.8/webapps/<br />
<br />
== 設定 ==<br />
<br />
<br />
=== MySQL ===<br />
<br />
ユーザ「mysql」を作成し、DBを初期化します。<br />
<br />
# /usr/sbin/useradd mysql<br />
# /usr/local/bin/mysql_install_db --user=mysql<br />
<br />
DBを起動し、rootのパスワードを設定します。<br />
<br />
# /usr/local/bin/mysqld_safe --user=mysql &<br />
# /usr/local/bin/mysqladmin -u root password <password><br />
<br />
Sonarでアクセスするためのユーザ(sonar)とパスワード(sonar)を作成し、DBを作成します。<br />
<br />
# mysql -u root -p<br />
<br />
<source lang="sql"><br />
mysql> grant all privileges on *.* to sonar@localhost identified by 'sonar' with grant option;<br />
mysql> create database sonar default character set utf8;<br />
</source><br />
<br />
=== Tomcat ===<br />
<br />
「conf/server.xml」の「Connector」要素に「URIEncoding="UTF-8"」を加えます。<br />
<br />
<source lang="xml"><br />
<Connector port="8080" protocol="HTTP/1.1"<br />
connectionTimeout="20000"<br />
redirectPort="8443" URIEncoding="UTF-8" /><br />
</source><br />
<br />
参考 : http://wiki.jenkins-ci.org/display/JA/Tomcat<br />
<br />
Sonar起動時のOutOfMemory発生を防ぐため、Tomcatの起動オプションを追加します。「/etc/bashrc」等に以下を追記します。<br />
<br />
export CATALINA_OPTS="-Xms1024m -Xmx1024m -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -XX:MaxPermSize=256m"<br />
<br />
参考 : http://docs.codehaus.org/display/SONAR/Install+Sonar#InstallSonar-Step4Startserver<br />
<br />
<br />
=== Sonar ===<br />
<br />
Tomcatで動作させるためのアーカイブファイルである「sonar.war」を作成します。<br />
<br />
MySQLを使用するための設定を行います。「conf/sonar.properties」のDerbyの設定をコメントアウトし、MySQL用の設定行のコメントアウトを元に戻します。<br />
<br />
Before :<br />
sonar.jdbc.url: jdbc:derby://localhost:1527/sonar;create=true<br />
sonar.jdbc.driverClassName: org.apache.derby.jdbc.ClientDriver<br />
sonar.jdbc.validationQuery: values(1)<br />
<br />
After :<br />
sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8<br />
sonar.jdbc.driverClassName: com.mysql.jdbc.Driver<br />
sonar.jdbc.validationQuery: select 1<br />
<br />
WARファイルのビルドを実行します。必ずDB設定の後に実行してください。<br />
<br />
# cd /usr/local/sonar-2.5/war/<br />
# ./build-war.sh<br />
<br />
ビルド時に以下のエラーが出た場合は、[http://repo2.maven.org/maven2/org/apache/ant/ant-nodeps/1.7.0/ant-nodeps-1.7.0.jar ant-nodeps-1.7.0.jar]が「apache-ant-1.7.0/lib/」に存在することを確認してください。<br />
<br />
<source lang="text"><br />
BUILD FAILED<br />
/usr/local/sonar-2.5/war/build.xml:63: Problem: failed to create task or type replaceregexp<br />
Cause: the class org.apache.tools.ant.taskdefs.optional.ReplaceRegExp was not found.<br />
This looks like one of Ant's optional components.<br />
Action: Check that the appropriate optional JAR exists in<br />
-/usr/local/sonar-2.5/war/apache-ant-1.7.0/lib<br />
-/root/.ant/lib<br />
-a directory added on the command line with the -lib argument<br />
<br />
Do not panic, this is a common problem.<br />
The commonest cause is a missing JAR.<br />
<br />
This is not a bug; it is a configuration problem<br />
</source><br />
<br />
ビルドが正常に終了すると、同一ディレクトリに「sonar.war」が生成されます。これを、Tomcatのwebappsにコピーします。<br />
<br />
# cp sonar.war /usr/local/apache-tomcat-7.0.8/webapps/<br />
<br />
=== Maven ===<br />
<br />
MySQLに接続するための設定を行います。<br />
<br />
以下を「/usr/local/apache-maven-3.0.2/conf/setting」の「profiles」要素の中に追記します。<br />
<br />
<source lang="xml"><br />
<profile><br />
<id>sonar</id><br />
<activation><br />
<activeByDefault>true</activeByDefault><br />
</activation><br />
<properties><br />
<!-- EXAMPLE FOR MYSQL --><br />
<sonar.jdbc.url><br />
jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8<br />
</sonar.jdbc.url><br />
<sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver><br />
<sonar.jdbc.username>sonar</sonar.jdbc.username><br />
<sonar.jdbc.password>sonar</sonar.jdbc.password><br />
<br />
<!-- SERVER ON A REMOTE HOST --><br />
<sonar.host.url>http://<HOST_NAME>:8080/sonar</sonar.host.url><br />
</properties><br />
</profile><br />
</source><br />
<br />
=== その他 ===<br />
<br />
「MAVEN_HOME」「JENKINS_HOME」の環境変数を設定します。<br />
<br />
export MAVEN_HOME=/usr/local/apache-maven-3.0.2/<br />
export JENKINS_HOME=/usr/local/jenkins/<br />
<br />
JenkinsがMavenのコマンドである「mvn」を実行するために、「/usr/local/apache-maven-3.0.2/bin/」をPATHに加えます。「JENKINS_HOME」直下にJenkinsの作業用ファイルが作成されます。<br />
<br />
== 起動 ==<br />
<br />
=== MySQL ===<br />
<br />
# /usr/local/bin/mysqld_safe --user=mysql &<br />
<br />
=== Tomcat ===<br />
<br />
# /usr/local/apache-tomcat-7.0.8/bin/startup.sh<br />
<br />
「http://<ホスト名>:8080/jenkins」でJenkinsのページにアクセスできます。<br />
<br />
[[ファイル:Install sonar02.png]]<br />
<br />
「http://<ホスト名>:8080/sonar」でSonarのページにアクセスできます。<br />
<br />
[[ファイル:Install sonar01.png]]<br />
<br />
初期起動時は、Sonar用のDB初期化処理が動くのでページにアクセスできるようになるまでに多少時間がかかります。<br />
<br />
== Sonarの品質管理画面を更新 ==<br />
<br />
Sonar初期起動時は、プロジェクトが何も登録されていません。ここでは、実際にプロジェクト作成する所から、Sonarでソースコードの品質を確認するまでの手順を記述します。ここでの手順はあくまで参考なので、この通りに実行しなくても良いです。<br />
<br />
=== Subversionリポジトリを作成する ===<br />
<br />
Tomcatが動作しているマシンに、Subversionリポジトリを作成します。<br />
<br />
# mkdir /var/lib/svn/sonar-sample -p<br />
# svnadmin create .<br />
# svnserve -d --listen-port 8001 -r .<br />
<br />
匿名ユーザでもコミットができるように「 /var/lib/svn/sonar-sample/conf/svnserve.conf」を編集します。<br />
<br />
Before :<br />
# anon-access = read<br />
<br />
After :<br />
anon-access = write<br />
<br />
=== Mavenプロジェクトを作成してコミットする ===<br />
<br />
ここでは、WindowsのEclipse 3.6(Pleades All in One)を使用して、MavenプロジェクトをSubversionにコミットする手順を記述します。<br />
<br />
m2eclipseを使用して、Mavenプロジェクトを作成します。m2eclipseが導入されていない場合は、[http://m2eclipse.sonatype.org/ ここ]から入手してください。<br />
<br />
Mavenプロジェクトを作成します。<br />
<br />
[[ファイル:Install sonar03.png|500px]]<br />
<br />
アーキタイプは適当に選択してください。(画像は省略しています)<br />
<br />
値を適当に入力します。<br />
<br />
[[ファイル:Install sonar04.png|500px]]<br />
<br />
Mavenプロジェクトが作成されます。<br />
<br />
[[ファイル:Install sonar05.png]]<br />
<br />
Subversionにインポートします。<br />
<br />
[[ファイル:Install sonar06.png|500px]]<br />
<br />
[[ファイル:Install sonar07.png|500px]]<br />
<br />
[[ファイル:Install sonar08.png|500px]]<br />
<br />
[[ファイル:Install sonar09.png|500px]]<br />
<br />
[[ファイル:Install sonar10.png|500px]]<br />
<br />
[[ファイル:Install sonar11.png|500px]]<br />
<br />
[[ファイル:Install sonar12.png]]<br />
<br />
=== Jenkinsでジョブを設定する ===<br />
<br />
先ほどコミットしたプロジェクトをジョブとして設定します。<br />
<br />
最初に、「Jenkinsの管理」->「システムの設定」からMavenの設定を行います。<br />
<br />
<br />
次に、「新規ジョブ作成」からジョブを作成します。<br />
<br />
[[ファイル:Install sonar13.png|600px]]<br />
<br />
「ソースコード管理システム」と「Maven」と「ビルド」の項目を変更します。<br />
<br />
[[ファイル:Install sonar14.png|600px]]<br />
<br />
[[ファイル:Install sonar15.png|600px]]<br />
<br />
[[ファイル:Install sonar16.png|600px]]<br />
<br />
「ビルド実行」を選択すると、ビルドが開始されます。<br />
<br />
[[ファイル:Install sonar17.png|600px]]<br />
<br />
コンソール出力の最後に「Finished: SUCCESS」と表示されていれば、正常に終了しています。<br />
<br />
[[ファイル:Install sonar18.png|600px]]<br />
<br />
再度、「http://<ホスト名>:8080/sonar」にアクセスると、「sonarsample」が追加されています。<br />
<br />
[[ファイル:Install sonar19.png|600px]]<br />
<br />
リンクから、ソフトウェア品質の状態が確認できます。<br />
<br />
[[ファイル:Install sonar20.png|600px]]<br />
<br />
<br />
== トラブルシューティング ==<br />
<br />
=== Jenkins実行時、「java.lang.IllegalArgumentException: mavenHome must exists」と表示される ===<br />
<br />
JenkinsでMAVEN_HOMEの設定をしていないと以下のエラーメッセージが表示されます。MAVEN_HOMEの設定をすると正しく処理されます。<br />
<br />
<source lang="java"><br />
ERROR: Processing failed due to a bug in the code. Please report this to jenkinsci-users@googlegroups.com<br />
java.lang.IllegalArgumentException: mavenHome must exists<br />
at hudson.maven.MavenEmbedderUtils.buildClassRealm(MavenEmbedderUtils.java:74)<br />
at hudson.maven.MavenEmbedderUtils.getMavenVersion(MavenEmbedderUtils.java:170)<br />
at hudson.maven.MavenVersionCallable.call(MavenVersionCallable.java:56)<br />
at hudson.maven.MavenVersionCallable.call(MavenVersionCallable.java:40)<br />
at hudson.FilePath.act(FilePath.java:785)<br />
at hudson.maven.MavenModuleSetBuild$RunnerImpl.doRun(MavenModuleSetBuild.java:568)<br />
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:423)<br />
at hudson.model.Run.run(Run.java:1362)<br />
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:454)<br />
at hudson.model.ResourceController.execute(ResourceController.java:88)<br />
at hudson.model.Executor.run(Executor.java:145)<br />
project=hudson.maven.MavenModuleSet@172d762c[sonar_sample]<br />
project.getModules()=[]<br />
project.getRootModule()=null<br />
FATAL: mavenHome must exists<br />
java.lang.IllegalArgumentException: mavenHome must exists<br />
at hudson.maven.MavenEmbedderUtils.buildClassRealm(MavenEmbedderUtils.java:74)<br />
at hudson.maven.MavenEmbedderUtils.getMavenVersion(MavenEmbedderUtils.java:170)<br />
at hudson.maven.MavenVersionCallable.call(MavenVersionCallable.java:56)<br />
at hudson.maven.MavenVersionCallable.call(MavenVersionCallable.java:40)<br />
at hudson.FilePath.act(FilePath.java:785)<br />
at hudson.maven.MavenModuleSetBuild$RunnerImpl.doRun(MavenModuleSetBuild.java:568)<br />
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:423)<br />
at hudson.model.Run.run(Run.java:1362)<br />
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:454)<br />
at hudson.model.ResourceController.execute(ResourceController.java:88)<br />
at hudson.model.Executor.run(Executor.java:145)<br />
</source><br />
<br />
※「Jenkins ver. 1.406」のスタックトレースです。<br />
<br />
== 更新履歴 ==<br />
<br />
* [[#トラブルシューティング]]追加 -- 2011年4月16日 (土) 17:34 (JST)<br />
* ページ作成 -- 2011年2月9日 (水) 23:27 (JST)</div>
Admin
http://www.sdmemo.com/wiki/Mercurial%E3%81%A8Apache%E3%81%AE%E9%80%A3%E6%90%BA
MercurialとApacheの連携
2011-02-03T05:59:21Z
<p>Admin: </p>
<hr />
<div>[[Category:バージョン管理システム]][[Category:Apache]][[Category:Mercurial]][[Category:その他]]<br />
<br />
本ページでは、Apacheを経由したMercurialの利用手順を記述します。Mercurialのバージョンは1.7.3を想定しています。インストール手順は[[Redmineの導入手順]]を踏襲していることを想定します。<br />
<br />
== 手順 ==<br />
<br />
mercurialのtar.gzファイルを解凍したディレクトリの直下にある「hgweb.cgi」ファイルをApacheのドキュメントフォルダ(例:/usr/local/apache2/htdocs 以下)に配置します。<br />
<br />
「httpd.conf」に以下を追記します。<br />
<br />
ScriptAlias /hg/test htdocs/hgweb.cgi<br />
<br />
cgiファイルの配置やURLは適宜修正してください。<br />
<br />
「hgweb.cgi」を編集します。<br />
<br />
<source lang="bash"><br />
#!/usr/bin/env python<br />
#<br />
# An example hgweb CGI script, edit as necessary<br />
# See also http://mercurial.selenic.com/wiki/PublishingRepositories<br />
<br />
# import sys<br />
# sys.path.append('/usr/bin/python')<br />
<br />
# Path to repo or hgweb config to serve (see 'hg help hgweb')<br />
config = "/var/lib/hg/test"<br />
<br />
# Uncomment and adjust if Mercurial is not installed system-wide:<br />
# 拡張モジュールのインストール先が既定と異なる場合は追加<br />
import sys; sys.path.insert(0, "/usr/local/lib64/python2.4/site-packages")<br />
<br />
# Webページの文字化け対策<br />
import os; os.environ["HGENCODING"] = "UTF-8"<br />
<br />
# Uncomment to send python tracebacks to the browser if an error occurs:<br />
#import cgitb; cgitb.enable()<br />
<br />
from mercurial import demandimport; demandimport.enable()<br />
from mercurial.hgweb import hgweb, wsgicgi<br />
application = hgweb(config)<br />
wsgicgi.launch(application)<br />
</source><br />
<br />
最後にApacheを再起動すれば、「http://<HOST_NAME>/hg/hgweb.cgi」にてアクセス可能となります。<br />
<br />
== トラブルシューティング ==<br />
<br />
=== Webアクセス時、Internal Server Errorとなる ===<br />
<br />
Apacheの「error_log」には以下が表示されている場合、Mercurialのモジュールが正しく読めていない可能性が有ります。「sys.path.insert」の設定を見直してください。<br />
<br />
=== TortoiseHGのPush時、「HTTP Error 500: Internal Server Error」となる ===<br />
<br />
Apacheの「error_log」には以下が表示されている場合、hgrcファイルの所有者がApahce実行ユーザとなっていない可能性が有ります。<br />
<br />
Not trusting file /var/lib/hg/test/.hg/hgrc from untrusted user root, group root<br />
Premature end of script headers: hgweb.cgi<br />
<br />
rootからApache実行ユーザに所有者を変更すればOKです。<br />
<br />
== 更新履歴 ==<br />
<br />
* ページ作成 -- 2011年2月3日 (木) 14:59 (JST)</div>
Admin