<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>静养心智-动抒豪情™ - 王聪明的日志 &#187; MySQL</title>
	<atom:link href="http://wangcongming.info/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://wangcongming.info</link>
	<description>灵 动 生 活　　点 滴 感 悟</description>
	<lastBuildDate>Tue, 27 Dec 2011 06:23:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Debian Squeeze/sid + Apache + Redmine 0.9.3/trunk + MySQL + git/hg</title>
		<link>http://wangcongming.info/2010/04/debian-squeezesid-apache-redmine-0-9-3trunk-mysql-githg/</link>
		<comments>http://wangcongming.info/2010/04/debian-squeezesid-apache-redmine-0-9-3trunk-mysql-githg/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 04:31:05 +0000</pubDate>
		<dc:creator>Wang Congming</dc:creator>
				<category><![CDATA[Geek Tweak]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Redmine]]></category>
		<category><![CDATA[ror]]></category>

		<guid isPermaLink="false">http://wangcongming.info/?p=186</guid>
		<description><![CDATA[Update: 已可直接从库里安装了～。 # apt-get install redmine redmine-mysql libapache2-mod-passenger _________________________________________________________________________ 按：这是在公司 WIKI 上写的文章，难得这么认真，拿出来分享一下 ：）。对比过十多个项目管理系统，然后在比较好的 Redmine, Trac, Mantis 三个当中选择了 Redmine。文中以 Debian Squeeze 为例，但其它 GNU/Linux 特别是 Debian Lenny / Sid、Ubuntu 应该基本一致。 _________________________________________________________________________ 一、废话 Debian 的库里有最新的 redmine 发布版（0.9.3），一个命令就可以搞定： #apt-get install redmine However……，安装后运行会出现 http 500 service unavailable 等问题。因为 Debian 只有 2.2.3 的 rails，而 redmine 0.9.3 要求 rails 的版本为 2.3.5。 我第一个想法是，既然库里有 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update: </strong>已可直接从库里安装了～。</p>
<p># apt-get install redmine redmine-mysql libapache2-mod-passenger<br />
_________________________________________________________________________</p>
<p id="一、废话">按：这是在公司 WIKI 上写的文章，难得这么认真，拿出来分享一下 ：）。对比过十多个项目管理系统，然后在比较好的 Redmine, Trac, Mantis 三个当中选择了 Redmine。文中以 Debian Squeeze 为例，但其它 GNU/Linux 特别是 Debian Lenny / Sid、Ubuntu 应该基本一致。</p>
<p>_________________________________________________________________________</p>
<h3>一、废话</h3>
<p>Debian 的库里有最新的 redmine 发布版（0.9.3），一个命令就可以搞定：</p>
<pre>#apt-get install redmine</pre>
<p>However……，安装后运行会出现 http 500 service unavailable 等问题。因为 Debian 只有  2.2.3 的 rails，而 redmine 0.9.3 要求 rails 的版本为 2.3.5。</p>
<p>我第一个想法是，既然库里有 redmine，就不折腾了，删掉 rails，再手工装一个新版本。可是 redmine 是依赖于 rails  的，要删得一起删。然后我就想，好，保留它，再装一个新版本覆盖之！就是这个想法……，最后遇到了很多问题，又因为对 ror  不熟，在这上面浪费了不少时间。</p>
<p>没办法，全 purge 掉，实实在在从头来吧。以下以 redmine-trunk 版为例（解决了 0.9.3 中存在的 wiki+php  等一些 bug）。</p>
<p>注：以下 # 开头的命令需以 root 身份执行。</p>
<h3 id="二、依赖关系">二、依赖关系</h3>
<pre>#apt-get install ruby rubygems rake mysql-server mysql-client libmysql-ruby libopenssl-ruby
#gem install rails
</pre>
<h3 id="三、下载-redmine">三、下载 redmine</h3>
<pre>/var/projects#svn checkout http://redmine.rubyforge.org/svn/trunk redmine</pre>
<p>注：稳定发行版本下载 <a href="http://rubyforge.org/frs/?group_id=1850">http://rubyforge.org/frs/?group_id=1850</a></p>
<h3 id="四、创建数据库">四、创建数据库</h3>
<pre># mysql -u root -p
mysql&gt; create database redmine character set utf8;
mysql&gt; grant all privileges on redmine.* to redmine@localhost identified by 'PASSWORD';
</pre>
<h3 id="五、数据库配置文件">五、数据库配置文件</h3>
<pre>/var/projects/redmine#cat config/database.yml
production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: PASSWORD
  encoding: utf8
</pre>
<h3 id="六、生成-session-key">六、生成 session key</h3>
<pre>#rake generate_session_store
</pre>
<p>会将结果写入 config/initializers/session_store.rb</p>
<h3 id="七、初始化数据库结构">七、初始化数据库结构</h3>
<pre>#RAILS_ENV=production rake db:migrate
</pre>
<h3 id="八、导入默认设置到数据库">八、导入默认设置到数据库</h3>
<pre>#RAILS_ENV=production rake redmine:load_default_data
</pre>
<h3 id="九、预览！">九、预览！</h3>
<pre>#ruby script/server webrick -e production
</pre>
<p>然后可以用浏览器访问 <a href="http://server:3000/">http://server:3000/</a> ，待测试没问题再继续。</p>
<h3 id="十、用-apache-运行-redmine">十、用 apache 运行 redmine</h3>
<p>WEBrick 虽然能跑，但是超慢！慢到无法忍受的地步（好奇的是，内存和cpu利用率都超低，它在干嘛呢……）。</p>
<p>安装：</p>
<pre>#apt-get install apache2 libapache2-mod-passenger</pre>
<p>权限：</p>
<pre>#chmod -R g+w redmine
#chown -R root:www-data redmine
</pre>
<p>符号链接：</p>
<pre>#ln -s /var/projects/redmine /var/www/redmine
</pre>
<p>配置文件：</p>
<pre>#cat /etc/apache2/conf.d/redmine
RailsEnv production
RailsBaseURI /redmine
</pre>
<p>Done:</p>
<pre>#/etc/init.d/apache reload
$firefox http://server/redmine/
</pre>
<h3 id="十一、安装修改-主题样式（可选）">十一、安装/修改 主题/样式（可选）</h3>
<p>Redmine 支持基本的主题自定义（可以覆盖默认的 css）。</p>
<p>可以到 <a href="http://www.redmine.org/wiki/redmine/Theme_List">http://www.redmine.org/wiki/redmine/Theme_List</a> 下载别人的主题包，解压后将包目录放到 public/themes/ 下面。</p>
<pre>#/etc/init.d/apache reload</pre>
<p>之后，即可访问 <a href="http://server/redmine/settings?tab=display">http://server/redmine/settings?tab=display</a> 选择新的主题。</p>
<p>不过我觉得还是默认的耐看。我直接对默认的主题做了一点修改：</p>
<pre>--- public/stylesheets/application.css    (revision 3628)
+++ public/stylesheets/application.css    (working copy)

+tr.priority-1, table.list.issues tr.priority-1 a { color: black; }
+
+tr.priority-2, table.list.issues tr.priority-2 a { color: #1c1cf3 /*similar to blue*/; }
+tr.priority-3, table.list.issues tr.priority-3 a { color: #1c1cf3; font-weight: bold; }
+
+tr.priority-4, table.list.issues tr.priority-4 a { color: red; }
+tr.priority-5, table.list.issues tr.priority-5 a { color: red; font-weight: bold; }
+
+tr.status-3, table.list.issues tr.status-3 a,
+tr.status-4, table.list.issues tr.status-4 a { color: green; font-weight: normal; }
+
+tr.status-5, table.list.issues tr.status-5 a,
+tr.status-6, table.list.issues tr.status-6 a { color: gray; font-weight: normal; }
</pre>
<p>以上加的几行，使得以不同的颜色区分不同优先级（低/高/紧急等）、不同状态（新建/进行中/反馈/已关闭等）的 issue。</p>
<h3 id="十二、安装插件（可选）">十二、安装插件（可选）</h3>
<p>很方便，下面是安装 email tls 插件的例子：</p>
<pre>#ruby script/plugin install git://github.com/collectiveidea/action_mailer_optional_tls.git</pre>
<p>更新数据库：</p>
<pre>#RAILS_ENV=production rake db:migrate:upgrade_plugin_migrations
#RAILS_ENV=production rake db:migrate_plugins
</pre>
<h3 id="十三、配置-email-发送功能-——-任务建立变更时，发送邮件提醒（可选）">十三、配置 email 发送功能 ——  任务建立/变更时，发送邮件提醒（可选）</h3>
<p>以 GMail 为例，先要安装上一步提到的 email 插件，然后:</p>
<pre>#cat config/email.yml
production:
  delivery_method: :smtp
  smtp_settings:
    tls: true
    address: "smtp.gmail.com"
    port: 587
    domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
    authentication: :plain
    user_name: "xxxxx@gmail.com"
    password: "xxxxxxxxxxxxxxxx"
</pre>
<p>完了 reload apache 即可。这里 <a href="http://server/redmine/settings?tab=notifications">http://server/redmine/settings?tab=notifications</a> 有一些设置选项。我去掉了 bcc，选中了纯文本。</p>
<p>修改 1:</p>
<pre>--- app/models/mailer.rb    (revision 3628)
+++ app/models/mailer.rb    (working copy)
-    subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] (#{issue.status.name}) #{issue.subject}"
+    subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.subject}" 

     s = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] "
-    s &lt;&lt; "(#{issue.status.name}) " if journal.new_value_for('status_id')
     s &lt;&lt; issue.subject
</pre>
<p>修改的目的，是使得 redmine 发送的邮件提醒在标题中不要包含 issue  的状态（新建/进行中/已关闭等），从而使得关于同一个问题的所有提醒邮件在 GMail 中都能自动组织成一个会话，非常有利于上下文的理解。</p>
<p>redmine 默认在邮件标题中包含 issue 的状态信息，使得每一次状态变更的邮件都分散到不同的会话中，很讨厌。</p>
<p>修改 2:</p>
<pre>--- config/locales/zh.yml    (revision 3628)
+++ config/locales/zh.yml    (working copy)
-  text_journal_changed: "{{label}} 从 {{old}} 变更为 {{new}}"
-  text_journal_set_to: "{{label}} 被设置为 {{value}}"
-  text_journal_deleted: "{{label}} 已删除 ({{old}})"
-  text_journal_added: "{{label}} {{value}} 已添加"
+  text_journal_changed: "{{label}}：{{old}} -&gt; {{new}}"
+  text_journal_set_to: "{{label}}： -&gt; {{value}}"
+  text_journal_deleted: "已删除：{{label}} ({{old}})"
+  text_journal_added: "已添加：{{label}} {{value}}"
</pre>
<p>对中文翻译的一点修改，这是邮件提醒中对 issue 变更的说明，我觉得太啰嗦了，不直观明了，没有重点。</p>
<p>注：如果你发现发出去的邮件，issue 链接都是带 3000 端口号的，而你现在用 apache 跑 redmine  不需要端口号，可以去 <a href="http://server/redmine/settings">http://server/redmine/settings</a> 改“主机名称”。这是因为你第九步的时候无意中保存过这个设置。</p>
<h3 id="十四、打-patch（可选）">十四、打 patch（可选）</h3>
<p>以下是作者提供的一个 patch，使得在 redmine  中，可以将任务指派给一个组/group，该组的所有成员都会收到邮件提醒（只是，该任务不会显示在“我的工作台”里）。</p>
<pre>redmine#wget http://www.redmine.org/attachments/download/2965/0001-Allow-issues-to-be-assigned-to-a-Group.-2964.patch
redmine#patch -p1 &lt; 0001-Allow-issues-to-be-assigned-to-a-Group.-2964.patch
</pre>
<p>注一：执行 patch 的时候，它会有一点小抱怨，可不予理会。</p>
<p>注二：<a href="http://server/redmine/groups">http://server/redmine/groups</a> ，此处可以增删/编辑小组及其成员。</p>
<h3 id="十五、与版本控制软件集成（githg）">十五、与版本控制软件集成（Git / Mercurial）</h3>
<p>配置系统（使得只有组内的成员才可以查看/修改项目代码，不同的项目使用不同的组）：</p>
<pre>#groupadd saas
#echo 'if [ "saas" == "$(id -gn $(whoami))" ]; then umask 007; fi' &gt;&gt; /etc/profile
</pre>
<p><strong>Update：</strong><br />
在 /etc/profile 中设置 umask 只会影响 login shell，而我们通过 git push 过来的文件仍然是默认的  755 权限（修改 .bashrc 等亦无效）。</p>
<p>要设置 git push 到服务器的文件的权限为 770（同组成员可写），正确的做法是：</p>
<pre># echo "session optional pam_umask.so umask=007" &gt;&gt; /etc/pam.d/common-session</pre>
<p>此外，以下方法应该也可以（没有测试）：</p>
<pre># echo "Subsystem git /bin/bash -c 'umask 007; /usr/bin/git'" &gt;&gt; /etc/ssh/sshd_config</pre>
<p>安装 git：</p>
<pre>#apt-get install git-core</pre>
<p>初始化 git 版本库：</p>
<pre>#mkdir /var/projects/saas
#cd /var/projects/saas
#git --bare init
#chown -R root:saas ../saas
#chmod -R 770 ../saas
</pre>
<p>版本库初始化完成，若要增加新的开发者（各自使用自己的帐号），由管理员执行：</p>
<pre>#useradd -m -s /bin/bash -g saas username # 注意，若不指定，默认的 dash 会出错
</pre>
<p>并将其 pub key 添加到 /home/username/.ssh/authorized_keys 之内。</p>
<p>开发人员在客户端的操作：</p>
<pre>$git config --global user.name "xxx yyy"
$git config --global user.email "xxx@gmai.com"
$git clone username@server:/var/projects/saas
</pre>
<p>测试：</p>
<pre>$cd saas
$echo hello &gt; world
$git add .
$git commit -a -m 'hello world'
$git push origin master
</pre>
<p>以后再 push，就不需要 “origin master” 这两个参数了。</p>
<p>最后，因为初始化版本库的时候我们用了 &#8211;bare 参数，在 /var/projects/saas 下是看不到项目代码文件的。</p>
<p>可以生成一份代码拷贝，用来在 apache 下进行测试：</p>
<pre>#cd /var/www
#git clone /var/projects/saas
#chown -R root:saas saas
#chmod -R 770 saas
#addgroup www-data saas
</pre>
<p>开发者 push 完后，apache 下的代码并不会自动更新，若想测试（这个测试相当于预览，因为开发人员 push  之前是需要先在自己的机器上认真测试的）更新后的代码：</p>
<pre>/var/www/saas$git pull # 注意，各用自己的帐号执行，不要用 root
</pre>
<p>至此，版本管理系统已经正常工作，还剩最后一件事：那就是告诉 Redmine，我们版本库的路径。</p>
<p>浏览器里打开 Redmine，新建一个项目，然后在“设置”里会有个标签叫“版本库”，选择 git，并在 path 里填  /var/projects/saas 就搞定了！</p>
<p>另，hg 的设置与 git 非常相似，大部分参数都一样，不另述。</p>
<h3 id="十六、升级-redmine-svn-trunk（可选）">十六、升级 redmine svn trunk（可选）</h3>
<pre>#svn update
#rake tmp:cache:clear
#rake tmp:sessions:clear
</pre>
<p>可能还要执行第七步和第十二步提到的更新数据库的操作。升级之前应该先备份，在测试实例上确认没有问题再升级。</p>
<h3 id="十七、备份redmine数据">十七、备份redmine数据</h3>
<p>一是数据库：</p>
<pre>#mysqldump -u redmine -p redmine &gt; redmine.$(date +%F).sql</pre>
<p>二是上传的文件：</p>
<pre>/var/projects/redmine#tar cvzf ../redmine.uploaded.files.$(date +%F).tar.gz files/</pre>
<p>（完）</p>
]]></content:encoded>
			<wfw:commentRss>http://wangcongming.info/2010/04/debian-squeezesid-apache-redmine-0-9-3trunk-mysql-githg/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

