|
http://blog.163.com/wb_zhaoyuwei/blog/static/183075439201301535012961/ 首先需要知道一点, svn co 只能check 目录, 不能co文件; 如果需要co文件, 需要用 svn export; svn co 的用法经常有两种: 第一种: 直接 svn co http://svnserver/mypro/trunk 此时, 会在你的当前目录下, 增加一个 trunk文件夹; svn的trunk文件的内容, 在trunk文件夹中。 第二种: svn co http://svnserver/mypro/trunk code 此时, 会在你的当前目录下, 增加一个 code的文件夹, svn的trunk的文件的内容, 在code中。
From: http://www.cnblogs.com/137913828S2/archive/2012/07/11/2585905.html ----start 有点SQL基础的人都会写INSERT语句,可是有很大一部分人不知道DB2的INSERT语句有三种格式,即:一次插入一行,一次插入多行和从SELECT语句中插入。考虑下面的情况: - CREATE TABLE USER
- (
- NAME VARCHAR(20) NOT NULL,---姓名
- BIRTHDAY DATE---生日
- );
现在要求你插入一行数据,我们这么写: - INSERT INTO USER (NAME,BIRTHDAY) VALUES ('张三','2000-1-1');
现在要求你插入三行数据,我们这么写: - INSERT INTO USER (NAME,BIRTHDAY) VALUES ('张三','2000-1-1');
- INSERT INTO USER (NAME,BIRTHDAY) VALUES ('李四','2000-1-1');
- INSERT INTO USER (NAME,BIRTHDAY) VALUES ('王五','2000-1-1');
除此之外,我们还可以这么写: - INSERT INTO USER (NAME,BIRTHDAY) VALUES
- ('张三','2000-1-1'),
- ('李四','2000-1-1'),
- ('王五','2000-1-1');
那么后一种写法有什么好处呢?有两点好处: 1、性能更好。 2、由于一条语句,所以它们是一个处理单元,要么都插入,要么都不插入。 除此之外,我们还可以从SELECT中插入,格式如下: - INSERT INTO USER (NAME,BIRTHDAY)
- SELECT <COLUMN1>,<COLUMN2> FROM <TABLE_NAME> WHERE ...
以上比较简单,我就不举例子了。 ---更多参见:DB2 SQL 精萃 ----声明:转载请注明出处。 ----last updated on 2009.11.5 ----written by ShangBo on 2009.9.24 ----end
jQuery获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 2. var checkText=$("#select_id").find("option:selected").text(); //获取Select选择的Text 3. var checkValue=$("#select_id").val(); //获取Select选择的Value 4. var checkIndex=$("#select_id ").get(0).selectedIndex; //获取Select选择的索引值 5. var maxIndex=$("#select_id option:last").attr("index"); //获取Select最大的索引值 jQuery设置Select选择的 Text和Value: 语法解释: 1. $("#select_id ").get(0).selectedIndex=1; //设置Select索引值为1的项选中 2. $("#select_id ").val(4); // 设置Select的Value值为4的项选中 3. $("#select_id option[text='jQuery']").attr("selected", true); //设置Select的Text值为jQuery的项选中 jQuery添加/删除Select的Option项: 语法解释: 1. $("#select_id").append("<option value='Value'>Text</option>"); //为Select追加一个Option(下拉项) 2. $("#select_id").prepend("<option value='0'>请选择</option>"); //为Select插入一个Option(第一个位置) 3. $("#select_id option:last").remove(); //删除Select中索引值最大Option(最后一个) 4. $("#select_id option[index='0']").remove(); //删除Select中索引值为0的Option(第一个) 5. $("#select_id option[value='3']").remove(); //删除Select中Value='3'的Option 5. $("#select_id option[text='4']").remove(); //删除Select中Text='4'的Option http://www.cnblogs.com/SAL2928/archive/2008/10/28/1321285.html jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关 获 取一组radio被选中项的值 var item = $('input[name=items][checked]').val(); 获 取select被选中项的文本 var item = $("select[name=items] option[selected]").text(); select下拉框的第二个元素为当前选中值 $('#select_id')[0].selectedIndex = 1; radio单选组的第二个元素为当前选中值 $('input[name=items]').get(1).checked = true; 获取值: 文本框,文本区域:$("#txt").attr("value"); 多选框 checkbox:$("#checkbox_id").attr("value"); 单选组radio: $("input[type=radio][checked]").val(); 下拉框select: $('#sel').val(); 控制表单元素: 文本框,文本区域:$("#txt").attr("value",'');//清空内容 $("#txt").attr("value",'11');//填充内容 多选框checkbox: $("#chk1").attr("checked",'');//不打勾 $("#chk2").attr("checked",true);//打勾 if($("#chk1").attr('checked')==undefined) //判断是否已经打勾 单选组 radio: $("input[type=radio]").attr("checked",'2');//设置value=2的项目为当前选中项 下拉框 select: $("#sel").attr("value",'-sel3');//设置value=-sel3的项目为当前选中项 $("<option value='1'>1111</option><option value='2'>2222</option>").appendTo("#sel")//添加下拉框的option $("#sel").empty();//清空下拉框 ---------------------------------------------------------------------------------------------------- //遍历option和添加、移除option function changeShipMethod(shipping){ var len = $("select[name=ISHIPTYPE] option").length if(shipping.value != "CA"){ $("select[name=ISHIPTYPE] option").each(function(){ if($(this).val() == 111){ $(this).remove(); } }); }else{ $("<option value='111'>UPS Ground</option>").appendTo($("select[name=ISHIPTYPE]")); } } //取得下拉選單的選取值 $(#testSelect option:selected').text(); 或$("#testSelect").find('option:selected').text(); 或$("#testSelect").val(); ////////////////////////////////////////////////////////////////// 记 性不好的可以收藏下: 1,下拉框: var cc1 = $(".formc select[name='country'] option[selected]").text(); //得到下拉菜单的选中项的文本(注意中间有空格) var cc2 = $('.formc select[name="country"]').val(); //得到下拉菜单的选中项的值 var cc3 = $('.formc select[name="country"]').attr("id"); //得到下拉菜单的选中项的ID属性值 $("#select").empty();//清空下拉框 //$("#select").html(''); $("<option value='1'>1111</option>").appendTo("#select")//添加下拉框的option 稍微解释一下: 1.select[name='country'] option[selected] 表示具有name 属性, 并 且该属性值为'country' 的select元素 里面的具有selected 属性的option 元素; 2,单选框: $("input[@type=radio][@checked]").val(); //得到单选框的 选中项的值(注意中间没有空格) $("input[@type=radio][@value=2]").attr("checked",'checked'); //设置单选框value=2的为选中状态.(注意中间没有空格) 3,复选框: $("input[@type=checkbox][@checked]").val(); //得到复选框的选中的第一项的值 $("input[@type=checkbox][@checked]").each(function() { //由于复选框一般选中的是多个,所以可以循环输出 alert($(this).val()); }); $("#chk1").attr("checked",'');//不打勾 $("#chk2").attr("checked",true);// 打勾 if($("#chk1").attr('checked')==undefined){} //判断是否已经打勾 当然jquery的选择器是强大的. 还有很多方法. <script src="jquery-1.2.1.js" type="text/javascript"></script> <script language="javascript" type="text/javascript"> $(document).ready(function(){ $("#selectTest").change(function() { //alert("Hello"); //alert($("#selectTest").attr("name")); //$("a").attr("href","xx.html"); //window.location.href="xx.html"; //alert($("#selectTest").val()); alert($("#selectTest option[@selected]").text()); $("#selectTest").attr("value", "2"); }); }); </script> <a href="#">aaass</a> <!--下拉框--> <select id="selectTest" name="selectTest"> <option value="1">11</option> <option value="2">22</option> <option value="3">33</option> <option value="4">44</option> <option value="5">55</option> <option value="6">66</option> </select> jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关获取一组radio被选中 项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选 中项的文本 var item = $("select[@name=items] option[@selected]").text(); select 下拉框的第二个元素为当前选中值 $('#select_id')[0].selectedIndex = 1; radio单选组的第二个 元素为当前选中值 $('input[@name=items]').get(1).checked = true; 获取值: 文本 框,文本区域:$("#txt").attr("value"); 多选框 checkbox:$("#checkbox_id").attr("value"); 单选组radio: $("input[@type=radio][@checked]").val(); 下拉框select: $('#sel').val(); 控 制表单元素: 文本框,文本区域:$("#txt").attr("value",'');//清空内容 $("#txt").attr("value",'11');// 填充内容 多选框checkbox: $("#chk1").attr("checked",'');//不打勾 $("#chk2").attr("checked",true);// 打勾 if($("#chk1").attr('checked')==undefined) //判断是否已经打勾 单选组radio: $("input[@type=radio]").attr("checked",'2');//设置value=2的项目为当前选中项 下拉框 select: $("#sel").attr("value",'-sel3');//设置value=-sel3的项目为当前选中项 $("<optionvalue='1'& gt;1111</option><optionvalue='2'>2222</option& gt;").appendTo("#sel")//添加下拉框的option $("#sel").empty();// 清空下拉框 获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item = $("select[@name=items] option[@selected]").text(); select下拉框的第二个元素为当 前选中值 $('#select_id')[0].selectedIndex = 1; radio单选组的第二个元素为当前选中值 $('input[@name=items]').get(1).checked = true; 获取值: 文本框,文本区域:$("#txt").attr("value"); 多选框 checkbox:$("#checkbox_id").attr("value"); 单选组radio: $("input[@type=radio][@checked]").val(); 下拉框select: $('#sel').val(); 控 制表单元素: 文本框,文本区域:$("#txt").attr("value",'');//清空内容 $("#txt").attr("value",'11');// 填充内容 多选框checkbox: $("#chk1").attr("checked",'');//不打勾 $("#chk2").attr("checked",true);// 打勾 if($("#chk1").attr('checked')==undefined) //判断是否已经打勾 单选组radio: $("input[@type=radio]").attr("checked",'2');//设置value=2的项目为当前选中项 下拉框 select: $("#sel").attr("value",'-sel3');//设置value=-sel3的项目为当前选中项 $("<option value='1'>1111</option><option value='2'>2222</option>").appendTo("#sel")//添加下拉框的option $("#sel").empty();// 清空下拉框
英文原文:The 10 commandments for happiness and success 生命短暂,无可浪费,这我们都知道。然而,大多数人都处中一种缺省状态的生活中,逼迫自己去认为很幸福——虽然事实上不是。为什么?因为我们让社会来指定该如何的去生活、什么才是成功和什么才是幸福。像金钱和名誉这样的东西被赋予太大的分量,成为祸根,阻碍了我们寻求生活的真正本质:活出自我,做有价值的事情。 如果让我给一个新生命(比如我未来的孩子)一点建议,我将衷心建议他遵循下面这 10 条诫律: 1/ 不要跟别人比。 自从上小学起,我们就被人们用分数来激励去竞争,忘记了教育的本质是学习。父母希望他们的孩子成为第一,或者要比 xx 更强,这样当在学校门口遇到 xx 的父母时,他们能显得很骄傲。于是,我们的成长过程一直受这种要比他人更强的思想熏染,却很少能想到真正应该的是超越自己,而不是别人。 2/ 只跟优秀的人、积极向上的人在一起。 消极、平庸的人到处都是,他们对你的影响将是毁灭性的。你也许是个很积极向上的人,但如果整天听到的都是悲观绝望的话,你最终也将变成这样的 人。因此,避免他们给你带来负面影响的最佳办法就是将这些没希望的人从你的身边剔除。当然,如果你在意他们,你有责任将你的积极心态传染给他们。 3/ 不要害怕失败,失败是你能遇到的最好的事情。 在我们这个社会眼里,失败是一个人遇到的最糟糕的事情。我个人的经历:我失败过,而且很惨。它本应该会对我带来灾难性的影响,但相反,它使我变 得更强壮,虽然不能用强壮好几倍来形容,但你真的无法想像我的变化。事实上,失败锻炼一个人的性格,它让你知道错在哪里,让你知道如何调整你的生活来防止 这种事情再次发生。人很容易满足现状,特别当事情看起来很顺利的时候。失败是对你的挑战。如今的飞机之所以这么安全,是因为过去摔过无数。相似的,如果看 看历史上所有伟大的人,不论男女,你会发现他们所有人都在生命的某个阶段上遇到过严重的挫折。所以,不要害怕尝试,不要担心失败。 4/ 找到你的志向,愉快的工作。 每天我都听到的有人说他们的研究和工作根本不是他们感兴趣的。大多时候,这都是由于父母的压力,让他们的孩子选择一条他们看来在社会上能获得名望的道路。他们很希望能说:我女儿是医生或我儿子是律师。用 更通俗的说法,我们生活中这个“面子”很重要的社会里,我们不停的做着我们不喜欢的事,来让我们在亲戚朋友眼里显的很成功。这能让我们快乐吗?我很怀疑。 当有人问你的职业时,他们的意图总是含蓄的,甚至直白的表明他们在看你是否在做很体面的事情。为什么不问问自己一个简单的问题:“你喜欢你的工作吗?”这是唯一重要的事情,因为唯一能让我们实现生命价值的东西是我们的热情。 5/ 对别人说的话保持警惕。 跟上面一点很相似。人们喜欢基于自己的经验给人建议,但他们的经验往往不适用于你。所以,不要总是听取被人的意见,也要相信自己的直觉。 6/ 要慷慨,尽己所能。 很多研究都有力的显示出“给予”和“幸福”之间有着直接的联系。基本的解释是,通过帮助他人,看到自己的行动对他人带来的积极影响,让我们将目光从自身转移出去,使得我们对自己内心自我批判不那么敏感。对这一主题,这有一篇好文章。 7/ 保持健康,健康饮食,锻炼身体,平衡生活。 这是明摆的事。健康是你的本钱,是让你完成更多目标的前提条件。虽然生命中有些事情是我们无法掌控的,但有些事情很明显,我们可以通过保持健康饮食和锻炼身体来避免很多重大的疾病。 8/ 不要担心会让别人失望。 如果他们爱你,他们不会失望。有些人很脆弱,面对不幸和压力时很容易心理崩溃。有时候这是因为害怕让他们在意的人失望。前面已经说了,失败不是坏事,如果他们关系你,他们绝不会指责你勇敢的尝试。还有,不要担心因为自己选择的道路会让父母失望。 9/ 别看电视,不要过度关注媒体。 它们的任务是来恐吓你,这是它们挣钱的手段。除此之外,他们的第二个任务是操控你,让你从真正的问题上分心。如果你还不知道这些, Noam Chomsky 写的10 media manipulation 策略是你应该去读的好文章。 10/ 树立明确的价值观,坚守它们,矢志不移 有很多很好的价值观能让你终身快乐并走向成功。目前这个社会崇尚金钱和地位,让我们改变它,教育我们的孩子养成以幸福快乐为目标的新价值观。 如果你赞同,请分享给你的朋友。如果不同意,请留言。 找优秀程
From: http://www.cnitblog.com/201/archive/2011/05/25/74069.html 在Bugzilla中通过SMTP发通知邮件 Posted on 2011/04/05 by admin
Bugzilla 4.0注册验证通知等邮件可以通过SendMail之类的来发送,配置也很简单,但是它发出去的邮件后缀地址是localhost.localdomain之类的地址,会被一些邮箱拦截,从而收不到邮件。所以通过SMTP来发邮件还是很必要的。 文档上说的配置SMTP也很简单,但是我在配置的时候遇到几个问题,在此记录下来 1、The new value for smtp_username is invalid: SMTP Authentication is not available. Run checksetup.pl for more details. 这是我在Bugzilla中Create New Account的时候发验证邮件时产生的,这个的原因是Perl有个模块没有安装,安装下就可以了 sudo perl install-module.pl Authen::SASL 自己先可以通过$ ./checksetup.pl –check-modules查看下已经安装了哪些模块 只要安装好,上述的这个问题就解决了
所以再次试着注册一个用户,提示邮件发送成功了,于是下面的问题产生了
2、提示邮件成功发送,但是实际邮件没有发送出去,因为我填的邮箱没有收到邮件 在这里我原先是开启了use_mailer_queue这个功能 于是我选择使用Test模式(Parameters -> Email -> mail_delivery_method -> SMTP)再发了一次,mailer.testfile木有邮件
网 络上有人和我是一样的问题,发不出去邮件,我参看这里http://hi.baidu.com/ever__love/blog/item /62473a9772800846d0135e2c.html的方法,把use_mailer_queue关闭(Parameters -> Email -> use_mailer_queue -> Off),再试着发送一次,果真mailer.testfile当中有邮件了
这样就基本定位到问题use_mailer_queue没有正常工作
于是又把use_mailer_queue开启 执行下面的命令 $ $BUGZILLA_HOME/jobqueue.pl check Configuration looks okay jobqueue.pl running – pid 5317 9 jobs in the queue.
看起来似乎正常,但是提示9 jobs in the queue,并且这个数目一直没有减少,这说明邮件几乎都被堵塞在这里了,而并没有发出去
于是又Debug发现 $ $BUGZILLA_HOME/jobqueue.pl -f -d restart Killing 9657 Starting up… TheSchwartz::work_once found no jobs TheSchwartz::work_once found no jobs
几乎神了,这里又说没有错误,那到底是哪里出问题了呢? 目前无解,求解ING。。。
UPDATE 后来经过分析解决了此问题 虽然debug jobqueue出来的信息开头几个没有发现什么异常,但是经过很多个“TheSchwartz::work_once found no jobs”之后出来一些错误信息,如下: …… TheSchwartz::work_once found no jobs TheSchwartz::work_once found no jobs TheSchwartz::work_once found no jobs ……. TheSchwartz::work_once found no jobs TheSchwartz::work_once found no jobs TheSchwartz::work_once found no jobs TheSchwartz::work_once got job of class ‘Bugzilla::Job::Mailer’ Working on Bugzilla::Job::Mailer … Use of uninitialized value $hostname in concatenation (.) or string at Bugzilla/Mailer.pm line 153. job failed. considering retry. is max_retries of 725 >= failures of 5? job failed: There was an error sending mail from ‘bugzilla_admin@’ to ‘xxxxx@aol.com’:Can’t call method “address” on an undefined value at lib/Email/Send/SMTP.pm line 25. TheSchwartz::work_once found no jobs …… TheSchwartz::work_once found no jobs TheSchwartz::work_once got job of class ‘Bugzilla::Job::Mailer’ Working on Bugzilla::Job::Mailer … Use of uninitialized value $hostname in concatenation (.) or string at Bugzilla/Mailer.pm line 153. job failed. considering retry. is max_retries of 725 >= failures of 5? job failed: There was an error sending mail from ‘bugzilla_admin@’ to ‘xxxxxx@gmail.com’:Can’t call method “address” on an undefined value at lib/Email/Send/SMTP.pm line 25. TheSchwartz::work_once found no jobs …… TheSchwartz::work_once found no jobs
……是我省略掉了很多这样相同的状态
看起来这个jobqueue当中的任务不是立即就执行了的,它可能是经过某种算法才执行的 否则不应该出现第一个就是“TheSchwartz::work_once found no jobs”,到后面才有任务执行的
并且进一步发现这些任务队列都是放在数据库当中的一张表(ts_job)中的,任务成功一个就把它从这张表中删除
不过此时问题还没有解决,认真看下错误,并且看了指出的错误地方的源代码,觉得应该是mailfrom填错了,可能我这里填的不完整
又打开SMTP的调试开关(Parameters -> Email -> smtp_debug -> On),这样能看到更多的详细信息,基本觉得问题就在这了
于是我填写了标准的邮件格式“username@example.com”之后再试,邮件还不没有发出去,jobqueue的的数量又增加了一个, 看来可能前面的这些包含错误信息的队列已经将后面的阻塞了,于是我试着将ts_job表当中的数据删除 truncate table ts_job; // 反正我这里是直接truncate掉了的,我不知道这里delete和truncate有没有区别
再次注册了一遍,看到后台输出通知邮件发送成功的信息,如下: TheSchwartz::work_once found no jobs TheSchwartz::work_once got job of class ‘Bugzilla::Job::Mailer’ Working on Bugzilla::Job::Mailer … Net::SMTP>>> Net::SMTP(2.31) Net::SMTP>>> Net::Cmd(2.29) Net::SMTP>>> Exporter(5.63) Net::SMTP>>> IO::Socket::INET(1.31) Net::SMTP>>> IO::Socket(1.31) Net::SMTP>>> IO::Handle(1.28) Net::SMTP=GLOB(0xb79ce68)<<< 220 esmtp4.qq.com Esmtp QQ Mail Server Net::SMTP=GLOB(0xb79ce68)>>> EHLO localhost.localdomain Net::SMTP=GLOB(0xb79ce68)<<< 250-esmtp4.qq.com Net::SMTP=GLOB(0xb79ce68)<<< 250-PIPELINING Net::SMTP=GLOB(0xb79ce68)<<< 250-SIZE 52428800 Net::SMTP=GLOB(0xb79ce68)<<< 250-AUTH LOGIN PLAIN Net::SMTP=GLOB(0xb79ce68)<<< 250-AUTH=LOGIN Net::SMTP=GLOB(0xb79ce68)<<< 250 8BITMIME Net::SMTP=GLOB(0xb79ce68)>>> AUTH LOGIN …… Net::SMTP=GLOB(0xb79ce68)<<< 235 Authentication successful Net::SMTP=GLOB(0xb79ce68)>>> MAIL FROM: Net::SMTP=GLOB(0xb79ce68)<<< 250 Ok Net::SMTP=GLOB(0xb79ce68)>>> RCPT TO: Net::SMTP=GLOB(0xb79ce68)<<< 250 Ok Net::SMTP=GLOB(0xb79ce68)>>> DATA Net::SMTP=GLOB(0xb79ce68)<<< 354 End data with . Net::SMTP=GLOB(0xb79ce68)>>> From: xxxxxx@qq.com Net::SMTP=GLOB(0xb79ce68)>>> To: xxxxxx@gmail.com Net::SMTP=GLOB(0xb79ce68)>>> Subject: Bugzilla: confirm account creation Net::SMTP=GLOB(0xb79ce68)>>> X-Bugzilla-Type: admin Net::SMTP=GLOB(0xb79ce68)>>> X-Bugzilla-URL: Net::SMTP=GLOB(0xb79ce68)>>> Auto-Submitted: auto-generated Net::SMTP=GLOB(0xb79ce68)>>> Content-Type: text/plain; charset=”UTF-8″ Net::SMTP=GLOB(0xb79ce68)>>> MIME-Version: 1.0 Net::SMTP=GLOB(0xb79ce68)>>> Date: Tue, 05 Apr 2011 16:05:23 +0800 Net::SMTP=GLOB(0xb79ce68)>>> Net::SMTP=GLOB(0xb79ce68)>>> Bugzilla has received a request to create a user account Net::SMTP=GLOB(0xb79ce68)>>> using your email address (xxxxxx@gmail.com). Net::SMTP=GLOB(0xb79ce68)>>> Net::SMTP=GLOB(0xb79ce68)>>> To continue creating an account using this email address, visit the Net::SMTP=GLOB(0xb79ce68)>>> following link by April 8, 2011 at 16:05 CST: Net::SMTP=GLOB(0xb79ce68)>>> Net::SMTP=GLOB(0xb79ce68)>>> token.cgi?t=FegLL6OpYM&a=request_new_account Net::SMTP=GLOB(0xb79ce68)>>> PRIVACY NOTICE: Bugzilla is an open bug tracking system. Activity on most Net::SMTP=GLOB(0xb79ce68)>>> bugs, including email addresses, will be visible to the public. We recommend …… Net::SMTP=GLOB(0xb79ce68)>>> . Net::SMTP=GLOB(0xb79ce68)<<< 250 Ok: queued as Net::SMTP=GLOB(0xb79ce68)>>> QUIT Net::SMTP=GLOB(0xb79ce68)<<< 221 Bye job completed TheSchwartz::work_once found no jobs
到QQ Mail也看到发送成功的邮件,在Gmail也收到了邮件,到此才算基本成功。
Parameters -> Email里面我的基本几项数据如下 mailfrom : xxxxxx@qq.com // 出现问题就是这里填的不标准 use_mailer_queue : on smtpserver : smtp.qq.com smtp_username : xxxxxx@qq.com smtp_password : ******
如果mail_delivery_method你选择SendMail或者Test,那么SMTP相关的参数就可以不用填了,如果你是通过SSL加密的SMTP链接,应该是要新装插件了
P.S. 关于use_mailer_queue的信息请挪步http://www.bugzilla.org/releases/4.0/release-notes.html#v34_feat_async
From http://blog.chinaunix.net/uid-209416-id-2410724.html 本文源于http://cranesss.gjjblog.com/archives/884277/ 但原文有错误,并且密码为明文不安全,对其做了修改,适用版本:2.25,主要方法是修改BugMail.pm并做SMTP的测试,请确保你的server能够连通smtp邮件服务器 具体做法: 一、安装好bugzilla(具体如何安装,见其他相关文档) 二,测试第三方邮件服务器SMTP发送邮件: 具体方法是,使用telnet,以smtp.163.com为例,其他请参考以下链接: http://search.csdn.net/c/blog.csdn.net/cjjky/archive/2007/02/23/1513083.aspx 假设帐号是test@163.com,密码为test, 1)root下使用perl -MMIME::Base64 -e 'print encode_base64("test")',把test换成实际的用户名或密码,记下返回的字串(这里是dGVzdA==),不同的smtp server,有的要求用户名是@前的(比如test),有的要求是全部(比如test@163.com),可以参考邮件提供商关于outlook等smtp客户端的设置. 2) telnet smtp.163.com 25 #25为163邮箱的smtp服务端口 Trying 202.108.5.83... Connected to smtp.163.com. Escape character is '^]'. 220 163.com Anti-spam GT for Coremail System (163com[071018]) EHLO smtp.163.com 250-mail 250-PIPELINING 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME AUTH LOGIN 334 dXNlcm5hbWU6 dGVzdA== #使用步聚1,得到的用户名字符串 334 UGFzc3dvcmQ6 dGVzdA== #使用步聚1,得到的密码字符串 235 Authentication successful MAIL FROM:<test@163.com> # FROM选项,<>里的必须是现在用的邮件名 250 Mail OK RCPT TO:<test@163.com> #TO 选项,发给谁 250 Mail OK DATA #准备填充邮件体 354 End data with <CR><LF>.<CR><LF> #按<回车>.<回车>结束 TO: test@163.com FROM: test@163.com SUBJECT: test by telnet/smtp test, just a test. . 250 Mail OK queued as smtp10,wKjADQ2ApxRnnqBE0CWaEw==.38326S3 NOOP 250 OK QUIT 221 Closing connection. Good bye. Connection closed by foreign host. 看有没有收到邮件,若测试成功,说明smtp server可以使用,记下perl生成的用户名和密码的字串,下方我称之为用户名密文,密码密文
三、修改$Bugzilla_DIR/Bugzilla/BugMail.pm,做如下修改: 增加新的邮件发送方法: sub MessageToMTA { my ($msg) = (@_); return if (Param('mail_delivery_method') eq "none");
my ($header, $body) = $msg =~ /(.*?\n)\n(.*)/s ? ($1, $2) : ('', $msg); my $headers;
if (Param('utf8') and (!is_7bit_clean($header) or !is_7bit_clean($body))) { ($headers, $body) = encode_message($msg); } else { my @header_lines = split(/\n/, $header); $headers = new Mail::Header \@header_lines, Modify => 0; }
# Use trim to remove any whitespace (incl. newlines) my $rcpt_to = trim($headers->get('to'));
use Net::SMTP; my $smtp_server = 'smtp.163.com'; my $smtp_user = 'test@163.com'; #这里用户名是全的
my $encode_smtpuser ='dGVzdA=='; #用户名密文 my $encode_smtppass = 'dGVzdA=='; #密码密文,用密文比明文enconde安全
my $smtp = Net::SMTP->new($smtp_server,Timeout => 60) || die 'Cannot connect to smtp server';
my $result = $smtp->command('AUTH','LOGIN'); my $answer = $smtp->getline(); # 334 VXNlcm5hbWU6
$result = $smtp->command($encode_smtpuser); $answer = $smtp->getline(); # 334 UGFzc3dvcmQ6 $result = $smtp->command($encode_smtppass); $answer = $smtp->getline(); # 235 Authentication successful # or 535 Authentication failed if ($answer =~ /535/i) {print "Sorry,Authentication failed!n";exit;}
$smtp->mail($smtp_user); $smtp->to($rcpt_to); $smtp->data(); $smtp->datasend($msg); $smtp->dataend(); $smtp->quit; } 这个方法与原来的方法重名,所以需要将原来的方法注释掉或者修改成另外一个名字,这样就能使用这个新的方法发送邮件了。 注意黑体部分,将他们替换成你自己的相应的数值。这是将所需参数写死在这里,就不能在配置界面进行配置了,如果需要再次修改这些参数,需要直接修改这个文件。而设置界面中的关于邮件发送方式的设置(sendmail/smtp/qmail..等)将不起作用了。
From: http://hi.baidu.com/najftulhmndgswr/item/6d8ba9f0d02e9004d89e7294 本文安装过程主要参考: http://www.bugzilla.org/docs/3.6/en/html/installation.html
http://www.thegeekstuff.com/2010/05/install-bugzilla-on-linux/
安装流程:
1. 先检测下 Perl是否安装了$ perl -v 如果没有安装,下载安装 2. 安装一个数据库,推荐使用 MySQL$ mysql -V 如果没有安装的话,用 apt-get即可,server和client都装下。 在装 mysql-server的时候会提示输入 password,记住,再后面创建数据库的时候会用到。 3. 安装apache2apt-get install 即可。 测试apache2是否正常: 在浏览器的URL栏输入: http://localhost 或者 http://127.0.0.1; 只要出现: It works! 表示服务器已经正常启动。 4. 下载并安装 Bugzilla 下载 Bugzilla 3.6.1,地址: http://www.bugzilla.org/download/下载后在 /var/www/目录下解压,然后进入目录 1)Perl 模块的安装 a)首先查看下缺少的模块 bash# ./checksetup.pl --check-modules b)然后利用这个命令将所缺模块安装上 bash# perl install-module.pl <modulename> 必须安装的模块有这些: 1. CGI (3.21) 2. Date::Format (2.21) 3. DateTime (0.28) 4. DateTime::TimeZone (0.71) 5. DBI (1.41) 6. DBD::mysql (4.00) if using MySQL 7. Digest::SHA (any) 8. Email::Send (2.00) 9. Email::MIME (1.861) 10. Email::MIME::Encodings (1.313) 11. Email::MIME::Modifier (1.442) 12. Template (2.22) 13. URI (any) 如果未安装模块太多,可以执行下列命令,全体安装:
(注意:由于安装模块的时候会有权限问题,所以在执行下列命令前, sudo chmod 777 -R bugzilla-3.6.1) bash# /usr/bin/perl install-module.pl --all (关于DateTime::TimeZone 模块安装失败的问题,请参考此网站的最后回复,Build) http://www.experts-exchange.com/OS/Linux/Q_25111007.html需要自己下载DateTIme模块,然后重新编译,在解压目录 perl Build.PL,然后按照上面网站所说!!! 2)成功装完后,生成本地config bash# ./checksetup.pl bash# vi ./localconfig 修改: $db_pass = 'akaedu'; 修改: $webservergroup = 'www-data'; 保存退出 3)之后在mysql数据库中加入信息 bash# mysql -u root -p (如果这里要输入密码一直过不去,请参考 http://hi.baidu.com/ever__love/blog/item/1c9b3c19cd0866f7af5133c7.html) mysql> GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER, CREATE, LOCK TABLES, CREATE TEMPORARY TABLES, DROP, REFERENCES ON bugs.* TO bugs@localhost IDENTIFIED BY 'akaedu'; mysql> FLUSH PRIVILEGES; mysql> quit; mysql的命令必须都以分号结束。 4) 再次安装 bash# ./checksetup.pl 如果上述一切正常,这次安装过程中将提示你输入 邮箱,真名,密码。 邮箱是你登录bugzilla的root用户名,密码就是密码。 5. 配置apache的config,与bugzilla的index链接bash# vi /etc/apache2/apache2.conf 在内部添加这样一段: <Directory /var/www/bugzilla-3.6.1> AddHandler cgi-script .cgi Options +Indexes +ExecCGI DirectoryIndex index.cgi AllowOverride Limit </Directory> 然后重启apache2 bash# /etc/init.d/apache2 restart 6. 到这里应该就能正常访问bugzilla的主页了URL: http://localhost/bugzilla (如果不行,就把bugzilla的版本号加上) 就会看到如下图像,表示正常登录bugzilla了。 大功告成 进入后,选一个 “File a bug”, 然后输入root用户名(邮箱)以及密码就正常登录,可以使用了。 目前遗留问题,无法注册普通用户,因为注册时候会发送确认信件,发送显示成功(没有报错),但目标信件收不到,不知是哪里出了问题。TODO! 上述邮件发送问题已经解决了!!! 解决方法: 感觉应该是 bugzilla的设置问题,在bugzilla网页上登录后,点击上端菜单中的 Administration, 然后选择 Parameters, 在左侧栏中选择E-mail,然后在 mail_delivery_method中选择 Test,虽然你点击了发送邮件,但会被bugzilla自己截获,存入 data/mailer.testfile文件中。如果发不出邮件,可以选择Test,在data/mailer.testfile文件中如果有信息,那 说明邮件服务器有问题,但如果此文件中没有信息,那就说明有别的问题。 我发送邮件显示正常,但目标收不到邮件,检查 data/mailer.testfile文件,发现是空的。之前用telnet smtp测试,能正常连通smtp.163.com,思来想去,应该就是bugzilla的设置问题。这个不成功的版本是在同时电脑上测试的,我自己的已 经成功,只不过过程中修改的东西太多,不知如何调试了。于是乎我就想到了diff,网页上的配置信息对应到源码中,就是 data/params文件,于是我将我的文件与我同事电脑上的这个文件进行了diff,其中有一项 use_mailer_queue。 不成功: 'use_mailer_queue' => '1', 成功的'use_mailer_queue' => 0, 于是将不成功的修改为 0,结果再尝试Test, data/mailer.testfile中已经有信息了,将 mail_delivery_method修改为SMTP,也能正常发送邮件了!
From: http://blog.csdn.net/wy818/article/details/7240294 有两种方法: 1.将项目打成war包,复制到${tomcat.home}\webapps目录下.当tomcat启动时会自动将其解包. 有人说,不能直接将war文件夹直接复制到${tomcat.home}\webapps目录下. 但是我试过之后,可以。将war包解压,解压出的文件夹要和war文件同名(后面可没有 .war),然后将文件夹放到webapps下面就可以了 2.修改${tomcat.home}\conf\server.xml文件.在Host节点下增加如下参考代码: <Context docBase="D:\pafalearning\userapp\dist\tomcat\userapp.war" path="/userapp" reloadable="true"/> - <Context docBase="D:\pafalearning\userapp\dist\tomcat\userapp.war" path="/userapp" reloadable="true"/>
docBase:指向项目的根目录所在的路径,由于我将项目打成了war包,所以直接指向这个war包就可以了(我的项目名为:userapp). path:是一个虚拟目录,这里设置成了"userapp",则启动Tomcat后,你将通过http://localhost:8080/userapp/*.jsp来访问项目的相关页面. reloadable:如果设置为"true",则表示当你修改jsp文件后,不需要重启服务器就可以实现页面显示的同步. 可以这样理解:将docBase实际目录下的项目,映射到${tomcat.home}\webapps目录下的虚拟项目path(这里的配置指的是userapp项目). 也许有些人还不懂war包是什么,其实就是你的项目下的WebRoot文件夹中的内容(不加WebRoot这个文件夹)打成一个压缩包,后缀用war,其实和rar差不多,不过tomcat就认war。 那为什么war包可以讲项目这个发布出来呢? 1.因为所有新建的文件夹都在WebRoot文件夹下 2.所有的页面都在WebRoot文件夹下 3.所有的后台代码都编译成了 .class文件,在WebRoot \ WEB-INF \ classes 下面 4.我们习惯将所有的 .jar包放在WebRoot \ WEB-INF \ lib 下面 有了这些,就相当于一个项目完全考到了tomcat下面,这就是用war包发布项目的原理
1. IFNULL(expr1,expr2) 2. 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。 IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。 3. mysql> select IFNULL(1,0); 4. -> 1 5. mysql> select IFNULL(0,10); 6. -> 0 7. mysql> select IFNULL(1/0,10); 8. -> 10 9. mysql> select IFNULL(1/0,'yes'); 10. -> 'yes' 11. IF(expr1,expr2,expr3) 12. 如果expr1是TRUE(expr10且 expr1NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。 13. mysql> select IF(1>2,2,3); 14. -> 3 15. mysql> select IF(1 'yes' 18. mysql> select IF(strcmp('test','test1'),'yes','no'); 16. -> 'no' 17. expr1 作为整数值被计算,它意味着如果你正在测试浮点或字符串值,你应该使用一个比较操作来做。 18. mysql> select IF(0.1,1,0); 19. -> 0 20. mysql> select IF(0.10,1,0); 21. -> 1 22. 在上面的第一种情况中,IF(0.1)返回0,因为0.1被变换到整数值, 导致测试IF(0)。这可能不是你期望的。在第二种情况中,比较测试原来的浮点值看它是否是非零,比较的结果被用作一个整数。 23. CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END 24. CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 33. 第一个版本返回result,其中value=compare-value。第二个版本中如果第一个条件为真,返回result。如果没有匹配的 result值,那么结果在ELSE后的result被返回。如果没有ELSE部分,那么NULL被返回。 25. mysql> SELECT CASE 1 WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "more" END; 26. -> "one" 27. mysql> SELECT CASE WHEN 1>0 THEN "true" ELSE "false" END; 28. -> "true" 29. mysql> SELECT CASE BINARY "B" when "a" then 1 when "b" then 2 END; 30. -> NULL
http://blog.csdn.net/jeamking/article/details/7226656
在MessageFormat.format方法中组装jason数据字符串:{code:"w1",des:"w2"},起止分别有左大括号和右大括号。方法是将单引号把大括号包含起来。如下: String responseTemplate = "'{'code:\"{0}\",des:\"{1}\"'}'"; System.out.println(MessageFormat.format(responseTemplate, "w1","w2")); 如果格式化字符串中包含单引号,处理方法是用2个单引号进行转义: String responseTemplate = "'{'code:''{0}'',des:''{1}'''}'"; System.out.println(MessageFormat.format(responseTemplate, "w1","w2")); 处理结果:{code:'w1',des:'w2'}
|