<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_酒酣胸胆尚开张，鬓微霜，又何妨！</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/14261/rss</id><updated>2012-02-07T03:46:23Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/14261/rss"/><entry><id>http://www.cnblogs.com/snowlove67/archive/2011/12/01/2270436.html</id><title type="text">redmine 安装roadmap 插件</title><summary type="text">为redmine添加里程碑.1. 参照https://ociotec.com/redmine/projects/advanced-roadmap/wiki/Advanced_roadmap_plugin_for_Redmine2. 启动测试失败，需要安装RMagick,http://www.huomo.cn/os/article-14d97.html3. 重启redmine.4. 使用时，需要在每一个项目的配置中，新建里程碑及相关版本， 并且在每一个问题中，选择目标版本，这样在路线图中会自动统计里程碑相关的任务汇总情况。</summary><published>2011-12-01T05:26:00Z</published><updated>2011-12-01T05:26:00Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><link rel="alternate" href="http://www.cnblogs.com/snowlove67/archive/2011/12/01/2270436.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/archive/2011/12/01/2270436.html"/><content type="html">&lt;p&gt;为redmine添加里程碑.&lt;/p&gt;&#xD;
&lt;p&gt;1. 参照&lt;br /&gt;&lt;a  href="https://ociotec.com/redmine/projects/advanced-roadmap/wiki/Advanced_roadmap_plugin_for_Redmine"&gt;https://ociotec.com/redmine/projects/advanced-roadmap/wiki/Advanced_roadmap_plugin_for_Redmine&lt;/a&gt;&lt;br /&gt;2. 启动测试失败，需要安装RMagick,&lt;a  href="http://www.huomo.cn/os/article-14d97.html"&gt;http://www.huomo.cn/os/article-14d97.html&lt;/a&gt;&lt;br /&gt;3. 重启redmine.&lt;br /&gt;4. 使用时，需要在每一个项目的配置中，新建里程碑及相关版本， &lt;/p&gt;&#xD;
&lt;p&gt;并且在每一个问题中，选择目标版本，这样在路线图中会自动统计里程碑相关的任务汇总情况。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/snowlove67/aggbug/2270436.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/snowlove67/archive/2011/12/01/2270436.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/snowlove67/archive/2011/11/09/2242496.html</id><title type="text">centos 下自动备份redmine 数据</title><summary type="text">1. 创建备份路径mkdir /root/redmineback2. 修改路径访问权限chmod 777 /root/redmineback3. 添加脚本redback.sh，vi /root/redmineback/redback.sh# 备份文件rsync -a /var/www/redmine/files /root/redmineback/files # 备份数据mysqldump -uroot -d redmine | gzip &amp;gt;/root/redmineback/redmine_`date +%y_%m_%d`.gz4.修改/etc/crontab,让脚本自动执行, vi </summary><published>2011-11-09T06:31:00Z</published><updated>2011-11-09T06:31:00Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><link rel="alternate" href="http://www.cnblogs.com/snowlove67/archive/2011/11/09/2242496.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/archive/2011/11/09/2242496.html"/><content type="html">&lt;p&gt;1. 创建备份路径&lt;/p&gt;&#xD;
&lt;p&gt;mkdir /root/redmineback&lt;/p&gt;&#xD;
&lt;p&gt;2. 修改路径访问权限&lt;/p&gt;&#xD;
&lt;p&gt;chmod 777 /root/redmineback&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code&gt;3. 添加脚本redback.sh，vi /root/redmineback/redback.sh&lt;/code&gt;&lt;code&gt;&lt;br /&gt;# 备份文件&lt;br /&gt;rsync -a /var/www/redmine/files /root/redmineback/files &lt;br /&gt;# 备份数据&lt;br /&gt;mysqldump -uroot -d redmine | gzip &amp;gt;/root/redmineback/redmine_`date +%y_%m_%d`.gz&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code&gt;4.&amp;nbsp;修改/etc/crontab,让脚本自动执行, vi /etc/crontab&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code&gt;添加cron 表达式&lt;/code&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code&gt;01 1 * * * root /root/redmineback/redmineback.sh&lt;/code&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/snowlove67/aggbug/2242496.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/snowlove67/archive/2011/11/09/2242496.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/snowlove67/archive/2011/11/08/2240831.html</id><title type="text">centos 5.6 安装redmine 步骤</title><summary type="text">1. Install gem and passenger dependenciesyum -y install zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel mysql-devel2. 下载ruby，注意安装包的名字mkdir downloadscd ~/Downloads # YOUR FOLDER OF CHOICEftp ftp.ruby-lang.orgcd /pub/rubyget ruby-1.8.7.pXXX.tar.gztar zxvf ruby-1.8.7.pXXX.tar.g</summary><published>2011-11-08T03:03:00Z</published><updated>2011-11-08T03:03:00Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><link rel="alternate" href="http://www.cnblogs.com/snowlove67/archive/2011/11/08/2240831.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/archive/2011/11/08/2240831.html"/><content type="html">&lt;p&gt;1. Install gem and passenger dependencies&lt;br /&gt;yum -y install zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel mysql-devel&lt;/p&gt;&#xD;
&lt;p&gt;2. 下载ruby，注意安装包的名字&lt;br /&gt;mkdir downloads&lt;br /&gt;cd ~/Downloads&amp;nbsp; # YOUR FOLDER OF CHOICE&lt;br /&gt;ftp &lt;a href="ftp://ftp.ruby-lang.org/"&gt;ftp.ruby-lang.org&lt;/a&gt;&lt;br /&gt;cd /pub/ruby&lt;br /&gt;get ruby-1.8.7.pXXX.tar.gz&lt;br /&gt;tar zxvf ruby-1.8.7.pXXX.tar.gz ruby-1.8.7.pXXX&lt;br /&gt;cd ruby-1.8.7.pXXX&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;ruby -v&lt;br /&gt;which ruby&lt;br /&gt;cd ..&lt;/p&gt;&#xD;
&lt;p&gt;3. 安装gems1.3.7&lt;br /&gt;wget &lt;a href="http://production.cf.rubygems.org/rubygems/rubygems-1.x.tgz"&gt;http://production.cf.rubygems.org/rubygems/rubygems-1.x.tgz&lt;/a&gt;&lt;br /&gt;tar zxvf rubygems-1.x.tgz rubygems-1.x&lt;br /&gt;cd rubygems-1.x&lt;br /&gt;ruby setup.rb&lt;br /&gt;gem -v&lt;br /&gt;which gem&lt;br /&gt;cd ..&lt;/p&gt;&#xD;
&lt;p&gt;4. 安装passenger&lt;br /&gt;gem install passenger&lt;br /&gt;passenger-install-apache2-module&lt;/p&gt;&#xD;
&lt;p&gt;5. 重启apache&lt;br /&gt;service httpd restart&lt;/p&gt;&#xD;
&lt;p&gt;6. 下载redmine&lt;br /&gt;wget &lt;a href="http://rubyforge.org/frs/download.php/75097/redmine-1.2.1.tar.gz"&gt;http://rubyforge.org/frs/download.php/75097/redmine-1.2.1.tar.gz&lt;/a&gt;&amp;nbsp; # GET LATEST VERSION ON RUBYFORGE&lt;br /&gt;tar zxvf redmine-1.2.1.tar.gz&lt;/p&gt;&#xD;
&lt;p&gt;7. 拷贝文件到http根路径&lt;br /&gt;进入/var/www/ 创建redmine文件夹.&lt;br /&gt;mkdir redmine&lt;br /&gt;回到/root/downloads/ 运行 cp -av redmine-1.2.1/* /var/www/redmine&lt;/p&gt;&#xD;
&lt;p&gt;8. 安装mysql&lt;br /&gt;# wget &lt;a href="http://download.mysql.cn/download_file/gz/5.0/mysql-5.0.22.tar.gz"&gt;http://download.mysql.cn/download_file/gz/5.0/mysql-5.0.22.tar.gz&lt;/a&gt; &lt;br /&gt;# tar zxvf mysql-5.0.22.tar.gz&lt;br /&gt;# cd mysql-5.0.22&lt;br /&gt;# ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data/ --without-innodb --without-debug --with-extra-charsets=gbk --with-extra-charsets=all --enable-assembler --with-pthread --enable-thread-safe-client --with-client-ldflags=-all-static&lt;br /&gt;(如果出错缺少curses/xxx，yum -y install ncurses-devel)&lt;br /&gt;# make &amp;amp;&amp;amp; make install&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;9. 生成会话密钥&lt;br /&gt;rake config/initializers/session_store.rb&lt;br /&gt;如缺少rake，则要安装 gem install -v=0.4.2 i18n&lt;/p&gt;&#xD;
&lt;p&gt;10. 建表，初始化默认数据&lt;br /&gt;rake db:migrate RAILS_ENV="production"&lt;br /&gt;rake redmine:load_default_data RAILS_ENV="production"&lt;/p&gt;&#xD;
&lt;p&gt;如果缺少rack 1.1.0，则需要卸载rake 1.0.1，安装1.1.0&lt;br /&gt;gem uninstall rack&lt;br /&gt;gem install rack -v=1.1.0&lt;/p&gt;&#xD;
&lt;p&gt;11. 安装mongrel&lt;br /&gt;gem install mongrel&lt;br /&gt;启动服务&lt;br /&gt;ruby script/server mongrel -e production&lt;br /&gt;编辑iptables允许访问3000&lt;br /&gt;vi /etc/sysconfig/iptables/&lt;br /&gt;添加 -A RH-firewall-1-INPUT -m state --state NEW -m tcp -p --dport 3000 -j ACCEPT&lt;br /&gt;重启iptables&lt;br /&gt;/sbin/service iptables restart&lt;/p&gt;&#xD;
&lt;p&gt;12. lsof -i tcp:3000&lt;br /&gt;查看pid&lt;br /&gt;kill -9 pid&lt;/p&gt;&#xD;
&lt;p&gt;13. 配置邮件&lt;/p&gt;&#xD;
&lt;p&gt;14. 配置ad&lt;/p&gt;&#xD;
&lt;p&gt;15. 拷贝mysql data&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/snowlove67/aggbug/2240831.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/snowlove67/archive/2011/11/08/2240831.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/snowlove67/archive/2011/11/08/2240829.html</id><title type="text">解决mysql 写入中文读出乱码的问题</title><summary type="text">show VARIABLES like &amp;#39;character_%&amp;#39;;先查看一下，各个设置的编码是否是 utf8set character_set_client=utf8;set character_set_server=utf8;set character_set_connection=utf8;</summary><published>2011-11-08T03:02:00Z</published><updated>2011-11-08T03:02:00Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><link rel="alternate" href="http://www.cnblogs.com/snowlove67/archive/2011/11/08/2240829.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/archive/2011/11/08/2240829.html"/><content type="html">&lt;p&gt;show VARIABLES like 'character_%';&lt;br /&gt;先查看一下，各个设置的编码是否是 utf8&lt;/p&gt;&#xD;
&lt;p&gt;set character_set_client=utf8;&lt;br /&gt;set character_set_server=utf8;&lt;/p&gt;&#xD;
&lt;p&gt;set character_set_connection=utf8;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/snowlove67/aggbug/2240829.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/snowlove67/archive/2011/11/08/2240829.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/snowlove67/archive/2011/11/02/2232857.html</id><title type="text">SVN的Redmine集成插件</title><summary type="text">安装步骤：下载并安装TortoiseSVN下载地址： http://tortoisesvn.net/downloads下载并安装TortoiseSVNRedmineIssuesPlugin下载地址：http://code.google.com/p/redmine-projects/downloads/list配置工作：TorToiseSVN--Settings--Hook Scripts--Issue Tracker integration点击Add，添加svn本地工作路径与Redmine问题atom源的对应关系。work copy path:表示svn本地工作路径。Provider: 选择t</summary><published>2011-11-02T03:52:00Z</published><updated>2011-11-02T03:52:00Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><link rel="alternate" href="http://www.cnblogs.com/snowlove67/archive/2011/11/02/2232857.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/archive/2011/11/02/2232857.html"/><content type="html">&lt;p&gt;&lt;strong&gt;安装步骤：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;下载并安装TortoiseSVN&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre&gt;&lt;code&gt;下载地址： &lt;a  href="http://tortoisesvn.net/downloads"&gt;http://tortoisesvn.net/downloads&lt;/a&gt;&lt;/code&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;下载并安装TortoiseSVNRedmineIssuesPlugin&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre&gt;&lt;code&gt;下载地址：&lt;a  href="http://code.google.com/p/redmine-projects/downloads/list"&gt;http://code.google.com/p/redmine-projects/downloads/list&lt;/a&gt;&lt;/code&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;配置工作：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre&gt;TorToiseSVN--Settings--Hook Scripts--Issue Tracker integration&lt;/pre&gt;&#xD;
&lt;pre&gt;点击Add，添加svn本地工作路径与Redmine问题atom源的对应关系。&lt;/pre&gt;&#xD;
&lt;pre&gt;work copy path:表示svn本地工作路径。&lt;/pre&gt;&#xD;
&lt;pre&gt;Provider: 选择tortoiseRedmine&lt;/pre&gt;&#xD;
&lt;pre&gt;parameters:拷贝redmine中某项目的问题列表的Atom源地址.例如:&lt;a  href="http://yourserver/projects/ldap/issues.atom?key=5b7a7c7874b36e0d0ac8c4bdeef929ed4738ef4f&amp;amp;set_filter=1"&gt;http://yourserver/projects/ldap/issues.atom?key=5b7a7c7874b36e0d0ac8c4bdeef929ed4738ef4f&amp;amp;set_filter=1&lt;/a&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在配置好的本地工作路径提交问题时，可以点右上角的Redmine issues，并选择问题作为提交备注。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/snowlove67/aggbug/2232857.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/snowlove67/archive/2011/11/02/2232857.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/snowlove67/archive/2011/10/27/2144323.html</id><title type="text">Quartz.net Tutorial Lesson 2</title><summary type="text">原文地址：http://quartznet.sourceforge.net/tutorial/lesson_2.htmlLesson 2: Jobs And Triggers第二课：任务与触发器As mentioned previously, you can make .NET component executable by the scheduler simply by making it implement the IJob interface. Here is the interface:我们之前提过，我们可以通过实现IJob接口，很容易地使.net组件按照计划执行，下面是IJob接口。</summary><published>2011-10-27T09:31:00Z</published><updated>2011-10-27T09:31:00Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><link rel="alternate" href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2144323.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2144323.html"/><content type="html">&lt;p&gt;原文地址：&lt;a href="http://quartznet.sourceforge.net/tutorial/lesson_2.html"&gt;http://quartznet.sourceforge.net/tutorial/lesson_2.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Lesson 2: Jobs And Triggers&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;第二课：任务与触发器&lt;/p&gt;&#xD;
&lt;p&gt;As mentioned previously, you can make .NET component executable by the scheduler simply by making it implement the IJob interface. Here is the interface:&lt;/p&gt;&#xD;
&lt;p&gt;我们之前提过，我们可以通过实现IJob接口，很容易地使.net组件按照计划执行，下面是IJob接口。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;IJob Interface &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;namespace&lt;/span&gt; Quartz&#xD;
{&#xD;
    &lt;span &gt;public&lt;/span&gt; &lt;span &gt;interface&lt;/span&gt; IJob&#xD;
    {&#xD;
        &lt;span &gt;void&lt;/span&gt; Execute(JobExecutionContext context);&#xD;
    }&#xD;
} &#xD;
    &lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;In case you couldn't guess, when the job's trigger fires (more on that in a moment), the Execute(..) method is invoked by the scheduler. The JobExecutionContext object that is passed to this method provides the job instance with information about its "run-time" environment - a handle to the IScheduler that executed it, a handle to the Trigger that triggered the execution, the job's JobDetail object, and a few other items.&lt;/p&gt;&#xD;
&lt;p&gt;我们可以猜到，当任务的触发器被触发时，任务的Execute()方法被调度器scheduler所调用。&lt;/p&gt;&#xD;
&lt;p&gt;The JobDetail object is created by the Quartz.NET client (your program) at the time the Job is added to the scheduler. It contains various property settings for the Job, as well as a JobDataMap, which can be used to store state information for a given instance of your job class.&lt;/p&gt;&#xD;
&lt;p&gt;Trigger objects are used to trigger the execution (or 'firing') of jobs. When you wish to schedule a job, you instantiate a trigger and 'tune' its properties to provide the scheduling you wish to have. Triggers may also have a JobDataMap associated with them - this is useful to passing parameters to a Job that are specific to the firings of the trigger. Quartz.NET ships with a handful of different trigger types, but the most commonly used types are SimpleTrigger and CronTrigger.&lt;/p&gt;&#xD;
&lt;p&gt;SimpleTrigger is handy if you need 'one-shot' execution (just single execution of a job at a given moment in time), or if you need to fire a job at a given time, and have it repeat N times, with a delay of T between executions. CronTrigger is useful if you wish to have triggering based on calendar-like schedules - such as "every Friday, at noon" or "at 10:15 on the 10th day of every month."&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Why Jobs AND Triggers?&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Many job schedulers do not have separate notions of jobs and triggers. Some define a 'job' as simply an execution time (or schedule) along with some small job identifier. Others are much like the union of Quartz.NET's job and trigger objects. While developing Quartz for Java, Quartz team decided that it made sense to create a separation between the schedule and the work to be performed on that schedule. This has (in our opinion) many benefits.&lt;/p&gt;&#xD;
&lt;p&gt;For example, jobs can be created and stored in the job scheduler independent of a trigger, and many triggers can be associated with the same job. Another benefit of this loose-coupling is the ability to configure jobs that remain in the scheduler after their associated triggers have expired, so that that it can be rescheduled later, without having to re-define it. It also allows you to modify or replace a trigger without having to re-define its associated job.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Identifiers&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Jobs and Triggers are given identifying names as they are registered with the Quartz.NET scheduler. Jobs and triggers can also be placed into 'groups' which can be useful for organizing your jobs and triggers into categories for later maintenance. The name of a job or trigger must be unique within its group - or in other words, the true identifier of a job or trigger is its name + group. If you leave the group of the Job or Trigger 'null', it is equivalent to having specified SchedulerConstants.DefaultGroup.&lt;/p&gt;&#xD;
&lt;p&gt;You now have a general idea about what Jobs and Triggers are, you can learn more about them in &lt;a href="http://quartznet.sourceforge.net/tutorial/lesson_3.html"&gt;Lesson 3: More About Jobs &amp;amp; JobDetails &lt;/a&gt;and &lt;a href="http://quartznet.sourceforge.net/tutorial/lesson_4.html"&gt;Lesson 4: More About Triggers &lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/snowlove67/aggbug/2144323.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2144323.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226779.html</id><title type="text">Redmine 导入AD用户</title><summary type="text">Redmine集成LDAP认证的前提是需要在系统中建立域用户，为此实现了一个从Ad中获取用户并初始化到Redmine的功能。功能设计 AD账户读取 定义Model public class ADUserModel { public string UserId { get; set; } public string UserName { get; set; } public string Email { get; set; } } 查询AD对象public static List&amp;lt;ADUserModel&amp;gt; GetAllDomainUs...</summary><published>2011-10-27T08:44:00Z</published><updated>2011-10-27T08:44:00Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><link rel="alternate" href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226779.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226779.html"/><content type="html">&lt;ul&gt;&#xD;
&lt;li&gt;Redmine集成LDAP认证的前提是需要在系统中建立域用户，为此实现了一个从Ad中获取用户并初始化到Redmine的功能。&lt;/li&gt;&#xD;
&lt;li style="text-align: left;"&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;功能设计&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;　　&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/10706/2011102716280598.jpg" /&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&#xD;
&lt;div style="text-align: left;"&gt;&lt;span style="font-size: 18pt;"&gt;AD账户读取&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 14px;"&gt;　　定义Model&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; ADUserModel&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; UserId { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; UserName { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; Email { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;    }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 18pt;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 14px;"&gt;　　查询AD对象&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; List&amp;lt;ADUserModel&amp;gt; GetAllDomainUserInfo()&lt;br /&gt;        {&lt;br /&gt;            List&amp;lt;ADUserModel&amp;gt; infolist = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;ADUserModel&amp;gt;();&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[] properties = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[] { &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;fullname&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; };            &lt;br /&gt;            System.DirectoryServices.DirectoryEntry adRoot = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.DirectoryServices.DirectoryEntry(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LDAP://&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + PrimaryDomainName, DomainUser, DomainPassword, AuthenticationTypes.Secure);&lt;br /&gt;            System.DirectoryServices.DirectorySearcher mySearcher = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; System.DirectoryServices.DirectorySearcher(adRoot);&lt;br /&gt;            mySearcher.Filter = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;(objectClass=*)&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            mySearcher.PropertiesToLoad.Clear();&lt;br /&gt;            SearchResultCollection searchResultCollection = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                searchResultCollection = mySearcher.FindAll();&lt;br /&gt;                infolist = VisitSearchResultCollection(searchResultCollection);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 处理异常&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            }            &lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; infolist;&lt;br /&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 14px;"&gt;　　将AD对象转换为Model&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; List&amp;lt;ADUserModel&amp;gt; VisitSearchResultCollection(SearchResultCollection resultCollection)&lt;br /&gt;        {&lt;br /&gt;            List&amp;lt;ADUserModel&amp;gt; domainlist = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;ADUserModel&amp;gt;();&lt;br /&gt;            StringBuilder html = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (SearchResult result &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; resultCollection)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; userName = &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; displayName = &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; distinguishedName = &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;                ADUserModel info = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ADUserModel();&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (result.Properties.Contains(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;samaccountname&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;))&lt;br /&gt;                {&lt;br /&gt;                    ResultPropertyValueCollection resultValue = result.Properties[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;samaccountname&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;];&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (resultValue != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; resultValue.Count &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; resultValue[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;] != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;                    {&lt;br /&gt;                        info.UserId = resultValue[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].ToString();&lt;br /&gt;                        info.Email = info.UserId + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@aa.com&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (result.Properties.Contains(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;mail&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;))&lt;br /&gt;                {&lt;br /&gt;                    ResultPropertyValueCollection resultValue = result.Properties[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;mail&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;];&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (resultValue != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; resultValue.Count &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; resultValue[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;] != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;                    {&lt;br /&gt;                        info.Email = info.UserId + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;@aa.com&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (result.Properties.Contains(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;displayname&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;))&lt;br /&gt;                {&lt;br /&gt;                    ResultPropertyValueCollection resultValue = result.Properties[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;displayname&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;];&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (resultValue != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; resultValue.Count &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt; &amp;amp;&amp;amp; resultValue[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;] != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;                    {&lt;br /&gt;                        info.UserName = resultValue[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].ToString();&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.IsNullOrEmpty(info.UserId))&lt;br /&gt;                {&lt;br /&gt;                    domainlist.Add(info);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; domainlist;&lt;br /&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 18pt;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 18pt;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&#xD;
&lt;div style="text-align: left;"&gt;&lt;span style="font-size: 18pt;"&gt;Redmine数据写入&lt;/span&gt;&lt;span style="font-size: 18pt;"&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (MySqlConnection conn = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MySqlConnection(ConfigurationManager.AppSettings[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;redmineconn&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;]))&lt;br /&gt;            {&lt;br /&gt;                conn.Open();&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (MySqlTransaction tran = conn.BeginTransaction() &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; MySqlTransaction)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;                    {&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (ADUserModel adUser &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; adUserList)&lt;br /&gt;                        {&lt;br /&gt;                            RedUserDal.Instance.InsertUser(adUser, conn, tran);&lt;br /&gt;                        }&lt;br /&gt;                        tran.Commit();&lt;br /&gt;                    }&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (Exception ex)&lt;br /&gt;                    {&lt;br /&gt;                        tran.Rollback();&lt;br /&gt;                        Logger.Error(ex.Message);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                conn.Close();&lt;br /&gt;                conn.Dispose();&lt;br /&gt;            }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left;"&gt;&lt;span style="font-size: 18pt;"&gt;&lt;/span&gt;&lt;span style="font-size: 18pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/snowlove67/aggbug/2226779.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226779.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226658.html</id><title type="text">RedMine 邮件通知配置</title><summary type="text">1. 打开\redmine-1.2.1\config， 将configuration.yml.example的后缀.example去掉。2. 用记事本打开，添加smtp配置# specific configuration options for production environment# that overrides the default onesproduction: email_delivery: delivery_method: :smtp smtp_settings: address: &amp;quot;smtpsrv02.xxx.cn&amp;quot; port: 25 ...</summary><published>2011-10-27T07:42:00Z</published><updated>2011-10-27T07:42:00Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><link rel="alternate" href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226658.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226658.html"/><content type="html">&lt;p&gt;1. 打开&amp;nbsp;\redmine-1.2.1\config， 将configuration.yml.example的后缀.example去掉。&lt;/p&gt;&#xD;
&lt;p&gt;2. 用记事本打开，添加smtp配置&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;# specific configuration options for production environment&lt;br /&gt;# that overrides the default ones&lt;br /&gt;production:&lt;br /&gt;  email_delivery:&lt;br /&gt;    delivery_method: :smtp&lt;br /&gt;    smtp_settings:&lt;br /&gt;      address: "smtpsrv02.xxx.cn"&lt;br /&gt;      port: 25&lt;br /&gt;      domain: 'xxx.cn'&lt;br /&gt;#      authentication: :login      # 这里需要测试，有些需要认证，有些不需要，如果smtp也在AD里的就不需要。&lt;br /&gt;#      user_name: &lt;a href="mailto:'redmine@xxx.cn'"&gt;'redmine@xxx.cn'&lt;/a&gt; #&lt;br /&gt;#      password: 'xxxxx'           #&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;3.&amp;nbsp; 保存文件，重启apache服务，登录页面&amp;rdquo;管理&amp;rdquo;&amp;mdash;-&amp;gt;&amp;rdquo;配置&amp;rdquo;&amp;mdash;-&amp;gt;&amp;rdquo;邮件通知&amp;rdquo;，修改邮件头，邮件签名，然后点击右下角的&amp;rdquo;发送测试邮件&amp;rdquo;，就可以测试你的邮件服务配置是否成功了。&lt;/p&gt;&#xD;
&lt;p&gt;4.&amp;nbsp; 修改邮件里的服务器链接：登录页面&amp;rdquo;管理&amp;rdquo;&amp;mdash;-&amp;gt;&amp;rdquo;配置&amp;rdquo;&amp;mdash;-&amp;gt;&amp;ldquo;一般&amp;rdquo;，主机名称。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/snowlove67/aggbug/2226658.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226658.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226586.html</id><title type="text">teamlab与redmine试用对比报告</title><summary type="text">系统介绍l TeamLab 是一个免费开源的商业协作和项目管理的平台。TeamLab 主要功能包括：项目管理、里程碑管理、任务、报表、事件、博客、论坛、书签、Wiki、即时消息等等。l Redmine 是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示，同时它又支持多项目管理。Redmine是一个自由开放 源码软件解决方案，它提供集成的项目管理功能，问题跟踪，并为多个版本控制选项的支持。部署环境TeamLabwindows server， .net framework 3.5RedMine任意操作系统 Ruby Mysql Apache软件结构l Tea</summary><published>2011-10-27T07:06:00Z</published><updated>2011-10-27T07:06:00Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><link rel="alternate" href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226586.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226586.html"/><content type="html">&lt;p&gt;&lt;strong&gt;系统介绍&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;l&amp;nbsp; &lt;em&gt;TeamLab&lt;/em&gt; 是一个免费开源的商业协作和项目管理的平台。TeamLab 主要功能包括：项目管理、里程碑管理、任务、报表、事件、博客、论坛、书签、Wiki、即时消息等等。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;l&amp;nbsp; Redmine 是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示，同时它又支持多项目管理。Redmine是一个自由开放 源码软件解决方案，它提供集成的项目管理功能，问题跟踪，并为多个版本控制选项的支持。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;部署环境&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;TeamLab&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;windows server， .net framework 3.5&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;RedMine&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;任意操作系统 Ruby Mysql Apache&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;软件结构&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;l&amp;nbsp; TeamLab系统基于大量C#第三方开源类库开发而成，代码工程比较复杂，支持扩展的能力比较强，基于sqlite或mysql两种数据库。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;l&amp;nbsp; RedMine系统基于ruby on rails mvc框架开发，代码及数据结构比较简洁，功能相对简单，基于mysql或postgresql数据库。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;试用情况&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;l&amp;nbsp; TeamLab 可定制性和扩展性更强一些，社区、IM、讨论方面的优势明显，TeamLab安装比较容易。&lt;/p&gt;&#xD;
&lt;p&gt;l&amp;nbsp; RedMine 试用感觉更像jira，常用的项目管理、缺陷管理功能非常相似，没有IM，论坛功能较差，安装步骤繁琐，中间会遇到很多ruby环境的问题。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;软件集成度&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;TeamLab&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;l&amp;nbsp; 集成LDAP认证，需要改造，而且用户多了，很多地方有问题。&lt;/p&gt;&#xD;
&lt;p&gt;l&amp;nbsp; 中文支持困难。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;RedMine&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;l&amp;nbsp; 集成LDAP较容易，用户选择方面比较好用，暂时没发现问题。&lt;/p&gt;&#xD;
&lt;p&gt;l&amp;nbsp; 默认支持多语言。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;综合对比&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;&lt;b&gt;对比条目&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;&lt;b&gt;Teamlab&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&lt;b&gt;Redmine&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;项目管理功能&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;问题管理功能&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;邮件提醒&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;进度可视化&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;报表&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;即时消息&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;有&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;没有&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;多项目支持&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;权限控制&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;文档、文件管理&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;Wiki、论坛&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;功能丰富&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;功能简单&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;自定义字段&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;Ldap认证&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;╳&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;多语言&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;中文支持不好&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;&amp;radic;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;多数据库&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;Sqlite,mysql&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;Mysql,postgresql&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="top" width="292"&gt;&#xD;
&lt;p&gt;Jira集成&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="135"&gt;&#xD;
&lt;p&gt;很难&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td valign="top" width="141"&gt;&#xD;
&lt;p&gt;相对容易&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/snowlove67/aggbug/2226586.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226586.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226312.html</id><title type="text">Redmine集成LDAP认证</title><summary type="text">用admin,admin登录到redmine，改环境为中文，然后到ldap认证里，添加一个ldap配置Name = My DirectoryHost = host.domain.orgPort = 389LDAPS = noAccount = MyDomain\UserName (or UserName@MyDomain depending on AD server)Password = &amp;lt;password&amp;gt;Base DN = CN=users,DC=host,DC=domain,DC=orgOn-the-fly user creation = yesAttributesLogin</summary><published>2011-10-27T04:01:00Z</published><updated>2011-10-27T04:01:00Z</updated><author><name>家中慢步</name><uri>http://www.cnblogs.com/snowlove67/</uri></author><link rel="alternate" href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226312.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226312.html"/><content type="html">&lt;p&gt;用admin,admin登录到redmine，改环境为中文，然后到ldap认证里，添加一个ldap配置&lt;/p&gt;&#xD;
&lt;pre&gt;Name = My Directory&#xD;
Host = host.domain.org&#xD;
Port = 389&#xD;
LDAPS = no&#xD;
Account = MyDomain\UserName (or UserName@MyDomain depending on AD server)&#xD;
Password = &amp;lt;password&amp;gt;&#xD;
Base DN = CN=users,DC=host,DC=domain,DC=org&#xD;
On-the-fly user creation = yes&#xD;
Attributes&#xD;
Login = sAMAccountName&#xD;
Firstname = givenName&#xD;
Lastname = sN&#xD;
Email = mail&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;同步AD中的用户账号到redmine数据库users表， 设置默认语种为中文，非管理员，AD认证。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/snowlove67/aggbug/2226312.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/snowlove67/archive/2011/10/27/2226312.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
