<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    nighty

    折騰的年華
    posts - 37, comments - 143, trackbacks - 0, articles - 0

    posted @ 2011-03-09 16:48 寒武紀(jì) 閱讀(13765) | 評論 (4)編輯 收藏

    1.  Redmine安裝前提條件

    官方的安裝指南:http://www.redmine.org/projects/redmine/wiki/RedmineInstall

    Notes:

    Ruby 1.9 is not supported yet. You have to use Ruby 1.8.x as stated above.
    RubyGems 1.3.1 or higher is required (Rails 2.3.5 will fail with RubyGems 1.5.0 and later, stick to previous versions of RubyGems)
    Rake 0.8.3 or higher is required
    Rack 1.0.1 is required. If you don't have this exact version, database migration would fail.
    I18n 0.4.2 is required for Redmine >= 1.0.5

     安裝主要版本選擇:ruby 1.8.6,rubygems1.3.5,rake 0.8.3,rack 1.0.1I18n 0.4.2,rails 2.3.5

         
    2.  yum安裝ruby

    使用yum安裝ruby相關(guān)的軟件

    yum -y install ruby ruby-devel ruby-libs ruby-irb ruby-rdoc ruby-mysql

    如果沒有ruby-mysql,則從http://www.tmtm.org/en/ruby/mysql/ 下載手動安裝

    3.
    升級ruby
    1.8.6版本

    /etc/yum.repos.d/ 目錄下創(chuàng)建yum源文件ruby.repo,內(nèi)容如下:

    --------------------------------------------------------------------------------

    [ruby] 
    name=ruby 
    baseurl=http://repo.premiumhelp.eu/ruby/ 
    gpgcheck=0 
    enabled=0 

    --------------------------------------------------------------------------------

    升級ruby

    yum --enablerepo=ruby update ruby

    4.  安裝rubygems1.3.5

    因?yàn)橹苯油ㄟ^yum安裝的rubygems0.9.4,所以選擇手工下載安裝的方式

    wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
    tar xzvf rubygems-1.3.5.tgz
    cd rubygems-1.3.5
    ruby setup.rb

    安裝完后運(yùn)行gem –v檢查一下版本是否正常,(當(dāng)然還可以直接用yum安裝,然后通過gem本身的更新來實(shí)現(xiàn),那從rubyforge下載的就應(yīng)該是.gem結(jié)束的升級文件)

    5.  安裝rails 2.3.5

    gem install rails –v=2.3.5

    6.  安裝Rack 1.0.1

    gem install rack –v=1.0.1

    7.  安裝Rake 0.8.3

    gem install rake –v=0.8.3

    8. 安裝I18n 0.4.2

    gem install -v=0.4.2 i18n

    9.  下載和安裝redmine1.1.1

    wget http://rubyforge.org/frs/download.php/74128/redmine-1.1.1.tar.gz

    拷貝壓縮文件到要安裝的目錄,比如 /var/www目錄下,解壓

    tar xzvf redmine-1.1.1.tar.gz

    cd redmine-1.1.1

    配置數(shù)據(jù)庫連接yml文件(redmine目錄下進(jìn)行如下操作)

    cd config

    cp database.yml.example database.yml

    vi database.yml

    添加如下內(nèi)容:

    production:
    adapter: mysql
    database: redmine
    host: localhost
    username: root
    password: xxx
    socket: /var/lib/mysql/mysql.sock

    數(shù)據(jù)庫要預(yù)先創(chuàng)建好,如果你裝好了mysql,直接運(yùn)行mysql -uroot -p 登錄,然后create database redmine,主機(jī)名、用戶名、密碼也要寫對。

    10.   生成會話密鑰

     rake config/initializers/session_store.rb

    11.  rails數(shù)據(jù)庫生成和數(shù)據(jù)初始化

    rake db:migrate RAILS_ENV=production
    rake redmine:load_default_data RAILS_ENV=production

    12.  運(yùn)行測試

    如果沒有異常,在redmine安裝目錄下執(zhí)行啟動服務(wù)器的命令:

    ruby script/server -e production &

    這樣redmine就會偵聽本機(jī)IP3000端口,輸入URLhttp://IP:3000 就可以看到登陸界面,如果是本機(jī)就直接 http://localhost:3000。

    但這樣只是以獨(dú)立的方式啟動redmine的服務(wù)器,在后臺執(zhí)行,有些不足,因?yàn)榭蛻舳说脑L問日志會在終端上直接顯示。并且你退出終端時(shí),服務(wù)器進(jìn)程也會跟著關(guān)閉,后面再介紹啟動和關(guān)閉腳本的編寫,以及如何用nginx做反向代理,或是用Apache也可以,這個(gè)網(wǎng)上可以搜索到很多資料。

    13.  附注:redmine默認(rèn)端口是3000,如果你是遠(yuǎn)程操作,直接訪問主機(jī)的IP或是域名是無法打開主頁的,因?yàn)?/span>centosiptables默認(rèn)是沒有開通3000端口的,所以需要開放端口。

    打開iptablesvi /etc/sysconfig/iptables

    添加下面一行到文件里面

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT

    然后重啟iptables

    /sbin/service iptables restart

    到此為止就完成redmine的安裝,過程比較繁瑣,主要是各種組件和模塊的版本匹配問題。大多數(shù)情況下根據(jù)安裝的錯(cuò)誤提示和Google就可以解決滴。

     

    posted @ 2011-03-01 09:47 寒武紀(jì) 閱讀(3096) | 評論 (1)編輯 收藏

            非常喜歡這種輕量級的JDBC封裝,比起Hibernate和iBatis,可以非常自由和靈活地運(yùn)用和自行二次封裝,由于dbutils的BeanHandler轉(zhuǎn)換方式采取了反射技術(shù),在性能上肯定有所損失,所以項(xiàng)目中基本上都使用MapHandler方式來轉(zhuǎn)換數(shù)據(jù),當(dāng)然就是自己寫的代碼多一點(diǎn),也無所謂。一般的查詢、子查詢、聯(lián)合查詢、包括視圖查詢等等都很正常,但是發(fā)現(xiàn)一個(gè)比較小的問題,就是在使用聚合函數(shù)的場所,例如:select user_type, count(*) as count from `user` group by user_type這種類型查詢的時(shí)候,MapHandler方式不起作用,as列都變成key為空串的K-V對,導(dǎo)致有許多地方使用map.get("")代碼的情況出現(xiàn),這種寫法當(dāng)然是不太好的,容易出問題。
            鑒于前面沒有時(shí)間了解,就都粗略使用了上面那種粗暴的map.get("")來處理,最好的情況是讓dbutils組件能自動識別到as類型的列名。于是有空了就專門看了看它的源代碼,發(fā)現(xiàn)最主要的一段代碼如下:
     1public Map<String, Object> toMap(ResultSet rs) throws SQLException {
     2        Map<String, Object> result = new CaseInsensitiveHashMap();
     3        ResultSetMetaData rsmd = rs.getMetaData();
     4        int cols = rsmd.getColumnCount();
     5
     6        for (int i = 1; i <= cols; i++{
     7            result.put(rsmd.getColumnName(i), rs.getObject(i));
     8        }

     9
    10        return result;
    11    }
            CaseInsensitiveHashMap是dbutils自定義的一個(gè)Map,忽略鍵大小寫的K-V字典,但是key使用的是ResultSetMetaData.getColumnName(),我想問題大概出在這里,于是認(rèn)真翻了翻java的api文檔(開發(fā)做久了容易遺忘基礎(chǔ)),果然,原來getColumnName()是:獲取指定列的名稱;而as關(guān)鍵字之后,使列名稱變成用于顯示的意義,這個(gè)時(shí)候應(yīng)該使用getColumnLabel():獲取用于打印輸出和顯示的指定列的建議標(biāo)題。建議標(biāo)題通常由 SQL AS 子句來指定。如果未指定 SQL AS,則從 getColumnLabel 返回的值將和 getColumnName 方法返回的值相同。自己手動試驗(yàn)了一下,果然如所料,問題就出在這里。
            所以呢,如果想要dbutils在自動轉(zhuǎn)換Map及MapList時(shí)能識別聚合函數(shù)的列名,那么最好的做法就是重載這種方式,懶一點(diǎn)的,你就干脆修改上面那段代碼,讓它判斷是否使用了as關(guān)鍵字。個(gè)人暫時(shí)搞不清楚官方為什么沒有考慮這一步,有時(shí)間再思考一下!

    posted @ 2011-02-12 17:33 寒武紀(jì) 閱讀(3029) | 評論 (7)編輯 收藏

        在項(xiàng)目中剛好有一個(gè)地方需要在服務(wù)器端處理一個(gè)請求后,重定向到另一個(gè)Action,這樣瀏覽器的url才會變成另一個(gè)url,用戶重新刷新時(shí),才不會彈出一個(gè)對話框問你是不是要重新提交form。于是就自然而然地用了redirectAction。大概如下:
       
    1<result name="myInfoSuccess" type="redirectAction">
    2    myapp_myInfo.action?msg=${msg}
    3</result>

        因?yàn)橹囟x會丟失所有的請求參數(shù)和值棧,所以這里轉(zhuǎn)向時(shí),加了一個(gè)請求參數(shù)msg,msg在要重定向的action中設(shè)置。
        問題來了,重定向到myapp_myInfo.action時(shí),這個(gè)Action里面取出msg參數(shù)時(shí)變成亂碼!!! 不論中文或是英語還是數(shù)字,全是亂碼,折騰了一翻,URLEncoderURLDEncoder進(jìn)行URL Base64編碼和解碼處理,包括new String(msg.getBtye("ISO-8859-1"), "UTF-8")這種處理方式仍無法奏效。google了一下并且抱起書本認(rèn)真看了看struts2重定向問題后。大概有了個(gè)思路。
        所有的重定向操作都會丟失所有的請求參數(shù)、請求屬性等,當(dāng)然包括Action的處理結(jié)果也會丟失。 
        首先搞清楚redirect、redirectAction的區(qū)別:
        1. redirect類型struts2是調(diào)用HttpServletResponse的sendRedirect(String)方法來重定向到指定的資源,可以是一個(gè)視圖結(jié)果,也可以是其它類型的Action;
        2. redirectAction同樣是重新生成一個(gè)全新的請求。但是struts2內(nèi)部卻是使用ActionMapperFactory提供的ActionMapper來重定向,它只能跳轉(zhuǎn)到另外一個(gè)Action;

             由于redirectAction使用的是ActionMapper來重定向,也就同時(shí)使用ActionMapper的編碼方式重新進(jìn)行編碼,這就導(dǎo)致了后面在取出參數(shù)時(shí)變成亂碼,沒有具體閱讀它的源代碼,但是多次不同的編碼再想重新還原出來就有點(diǎn)麻煩了。而redirect是使用HttpServletResponse來重定向,就不存在上面的問題。最后改為redirect來重定向,結(jié)果如下:
    1<result name="myInfoSuccess" type="redirect">
    2    <param name="location">myapp_myInfo.action?msg=${msg}</param>
    3    <param name="encode">true</param>
    4</result>
            注意:在myapp_myInfo.action對應(yīng)的Action必須對msg參數(shù)做一次轉(zhuǎn)碼,因?yàn)榍懊娴腁ction過來時(shí)就做了URL base64編碼,如果直接發(fā)給瀏覽器,就會在瀏覽器看到一串帶%的URL base64編碼字符,所以要加上
    1String msg = URLDecoder.decode(getMsg(), "UTF-8");
    2setMsg(msg);
           把它設(shè)置回為中文,瀏覽器才能正常。

           還得提到另一個(gè)重定向類型chain,它是Action鏈,還能維持當(dāng)前的值棧不變。不過用它重定向后,雖然跳到其它Action,但是在瀏覽器端的URL是不會變化的,這樣開頭提到的那個(gè)問題仍是無法解決的!

    posted @ 2011-01-14 16:41 寒武紀(jì) 閱讀(6770) | 評論 (3)編輯 收藏

         摘要: 項(xiàng)目中使用了FreeMarker做為視圖技術(shù),相對來說因?yàn)閒reemarker在視圖上有一些邏輯處理功能,某些地方就顯得比較方便,特別是macro的使用,當(dāng)然也不是說JSP就沒有這個(gè)功能,只是以前用JSP寫起來沒有這么順手.......  閱讀全文

    posted @ 2010-11-10 15:43 寒武紀(jì) 閱讀(3092) | 評論 (3)編輯 收藏

         摘要: 都說roller在國外是二次開發(fā)博客系統(tǒng)的首選,但是下載源代碼之后發(fā)現(xiàn)是它是基于netbeans項(xiàng)目結(jié)構(gòu)開發(fā)的。平時(shí)用習(xí)慣了Eclipse,所以想搬到MyEclipse上面,但沒有想到居然那么不容易,折騰了整整一天,才最終跑起來。網(wǎng)上的參考信息太少,大概都是那二三篇的轉(zhuǎn)貼,全部結(jié)合起來就差不多可以解決,借此總結(jié)一下,希望用到的朋友有參考作用!  閱讀全文

    posted @ 2009-11-22 21:04 寒武紀(jì) 閱讀(2257) | 評論 (2)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-10-14 17:41 寒武紀(jì) 閱讀(2174) | 評論 (1)編輯 收藏

        最近的二個(gè)項(xiàng)目,由于規(guī)模較小,都是十張表之內(nèi),而且表關(guān)聯(lián)非常少。所以用了一下iBatis做為數(shù)據(jù)庫關(guān)系映射,本著減少手寫JDBC代碼的目的,想著可以減少工作量。但是卻遇到了二個(gè)令人郁悶的問題。由于環(huán)境的限制,使用了jdk1.4.x編譯的iBatis2.3版本,沒有使用最近的。

        第一問題:  其中的一個(gè)項(xiàng)目,有一個(gè)表為它配置了sql Map的一個(gè)delete操作,非常簡單,大概就是delete from xxx where id=#value#這樣的語句,然后用sqlMapClient進(jìn)行操作,日志打印完全正常,沒有報(bào)任何Exception,返回影響記錄數(shù)也是正確的。但是進(jìn)數(shù)據(jù)庫一看,巍然不動!左查查,右查查,查不出任何毛病。更奇怪的是,數(shù)據(jù)庫表之間的所有關(guān)聯(lián)和索引全部取消,還是存在這問題。其它的三個(gè)字段比較少的表,這樣配置,同樣的api調(diào)用卻正常!這個(gè)出問題的數(shù)據(jù)庫表字段大概20+個(gè)左右。

        第二個(gè)問題:另一個(gè)項(xiàng)目,是二期重構(gòu),本來一期也不復(fù)雜,全部是使用JDBC實(shí)現(xiàn)的,只是有些表的字段太多,JDBC寫到煩,特別是處理一些NULL的插入,還有批處理時(shí)異常日志的詳細(xì)處理也有點(diǎn)煩。近期做二期升級,就算采用iBatis來減少一些代碼量,于于喜涮涮地搞上去了,代碼的確減少了許多。單元測試也能通過,后來就設(shè)置了比較復(fù)雜的數(shù)據(jù)。發(fā)現(xiàn)問題的現(xiàn)場如下:在一個(gè)業(yè)務(wù)接口中,一個(gè)事務(wù)中包含了許多SQL操作,有delete,也有insert,大概十個(gè)sql語句左右,全部放在一個(gè)batch中執(zhí)行,整個(gè)batch提交一個(gè)事務(wù)。測試環(huán)境提供了31個(gè)類似的業(yè)務(wù)數(shù)據(jù),總共執(zhí)行31個(gè)事務(wù),采用for的循環(huán)執(zhí)行調(diào)用,每逢索引 i = 10*n  的時(shí)候就會卡住,這個(gè)操作得花很長時(shí)間,最后能通過。后來進(jìn)行跟蹤,發(fā)現(xiàn)是在執(zhí)行第一個(gè)語句delete一個(gè)記錄(delete from xxx where id='xx')同樣也是單表刪除。搜索了google,baidu,沒有任何資源,翻遍了文檔沒有任何說明,查了網(wǎng)站FAQ也沒有辦法。于是,只能.......郁悶!

       為什么遇到delete都會有這個(gè)問題?不曉得有沒有高手遇到同樣的問題,這里算是總結(jié)的同時(shí)也提問,希望有遇到相同類型的高手給個(gè)解決的方案。如果不行,就得倒回去用JDBC實(shí)現(xiàn),就此iBatis的體驗(yàn)使用也就擱置,估計(jì)以后也不會碰它了。Hibernate就不用了,有點(diǎn)小題大作。
       google了才知道,原來iBatis的書籍、論壇、資料、討論等等相比Hibernate要少很多。學(xué)習(xí)是很簡單,但是遇到這種細(xì)節(jié)的時(shí)候,又不太愿意花時(shí)間去研究源代碼(都是現(xiàn)實(shí)所逼,有個(gè)球時(shí)間呀?)。所以選框架要慎重?。。?

    posted @ 2009-08-21 16:52 寒武紀(jì) 閱讀(4325) | 評論 (24)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-07-31 15:58 寒武紀(jì) 閱讀(2159) | 評論 (6)編輯 收藏

    Java環(huán)境安裝
        1.  從sun主頁下載JDK for Linux版本。這里下載的是jdk-6u6-linux-i586.bin。
        2. 用root用戶登錄ubuntu,或是在普通用戶下用su命令切換用戶。切換到所需的安裝目錄。類型:cd <目錄路徑名>   例如,要在 /usr/java/ 目錄中  安裝軟件,請鍵入:cd /usr/java/,把jdk-6u6-linux-i586.bin文件拷貝這個(gè)目錄里面,設(shè)置權(quán)限為可執(zhí)行類型:chmod a+x jre-6u6-linux-i586.bin
        3. 啟動安裝過程。鍵入:./jre-6u<version>-linux-i586.bin。接下來會提示二進(jìn)制的許可協(xié)議,鍵入yes回車即可。安裝過程如果遇到一些問題,都同樣鍵入yes就可以。
        4. 一路下來,最后看到Done字樣,就完成了Java環(huán)境的安裝。安裝的位置就是當(dāng)前目錄 /usr/java,當(dāng)然你可以選擇在別的位置。可以用ls命令查看一下是否正常。

    環(huán)境變量配置
       上面安裝完畢后,直接在shell里面輸入java是不起作用的,需要先配置一下環(huán)境變量。一般都會用export命令,不過這樣設(shè)置只對當(dāng)前shell起作用,重啟或是切換到別的shell會話就不起作用了??梢赃x擇配置 .bashr文件。用vi或是gedit打開,在末尾添加下面的內(nèi)容
       export JAVA_HOME=/usr/java/jdk1.6.0_06
       export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
       export PATH=$PATH:$JAVA_HOME/bin
       然后保存。再在shell里面試驗(yàn)一下是否安裝成功。echo一下各個(gè)變量是否正常,然后輸入java -version看看。
      還有一種方式是修改/etc/profile,這樣相當(dāng)于修改系統(tǒng)配置文件,對所有用戶都有影響,我在嘗試的過程可能輸入了一些異常字符,導(dǎo)致整個(gè)ubuntu無法用GUI登錄,無奈只能用文本登錄,然后再次把profile改回來才正常。
       好了之后可以先試一下用vi新建一個(gè)Hello的Java文件,然后編譯一下試運(yùn)行。

    Eclipse安裝
       Linux下面的Eclipse在ubuntu的界面渲染下看起來非常漂亮。先從Eclipse社區(qū)下載一個(gè)Linux版本的,這里下載的是europa版本的gz包。只要解壓到一個(gè)目錄就可以,這里選擇/opt/eclipse下面。Eclipse是解壓就可以使用的。不過為了方便,我們在桌面做一個(gè)啟動器把啟動目標(biāo)指向到Eclipse的安裝目的地,選擇里面已有的圖標(biāo)文件,這樣就完成了。不過默認(rèn)Eclipse是找不到Java執(zhí)行路徑的,有網(wǎng)友寫了這樣一個(gè)腳本eclipse.sh 放到/usr/local/bin目錄下,記得加上775權(quán)限。然后把啟動器位置指到這里eclispe.sh。下面是eclipse.sh的內(nèi)容:
        #!/bin/bash
        #
        # 執(zhí)行 eclipse 2.1.1
        #
        export JAVA_HOME=/usr/java/XXX
        export CLASSPATH=/usr/java/XXX/lib
        /opt/eclipse/eclipse -vm /usr/java/XXX/bin/java -data ~/workspace &
        # -vm 參數(shù)用以指定使用哪一個(gè) jvm 來執(zhí)行Eclipse,
        # -date參數(shù)用以指定Eclipse的數(shù)據(jù)目錄。在此指定其存在用戶根目錄(~)下的workspace目錄中
      
       還有一個(gè)比較笨的方法,Eclipse默認(rèn)會去找它自己目錄下是不是有jre存在,如果有,它就可以啟動,那么你可以直接把先前安裝好的JDK里面的JRE目錄整個(gè)復(fù)制到Eclipse里面。然后就可以直接運(yùn)行了。下面看一下效果
      

    posted @ 2008-08-29 17:07 寒武紀(jì) 閱讀(38192) | 評論 (6)編輯 收藏

    僅列出標(biāo)題
    共4頁: 上一頁 1 2 3 4 下一頁 
    主站蜘蛛池模板: 日本19禁啪啪无遮挡免费动图| 99视频免费播放| 婷婷综合缴情亚洲狠狠尤物| 亚洲熟妇无码一区二区三区| 成人女人A级毛片免费软件| 亚洲无成人网77777| 97在线线免费观看视频在线观看 | 国产亚洲精品成人a v小说| 全黄A免费一级毛片| 国产精品亚洲高清一区二区| h片在线播放免费高清| 国产亚洲老熟女视频| 国产一级婬片A视频免费观看| 亚洲伊人久久大香线蕉综合图片 | 成在人线av无码免费高潮喷水| 国产精一品亚洲二区在线播放| 久久伊人免费视频| 亚洲综合图片小说区热久久| 男女超爽刺激视频免费播放 | 中文字幕精品亚洲无线码二区 | 一级毛片无遮挡免费全部| 青青草原亚洲视频| 日韩电影免费观看| 亚洲看片无码在线视频| 免费A级毛片无码久久版| 国产啪精品视频网站免费尤物| 亚洲va在线va天堂va不卡下载 | 毛片a级三毛片免费播放| 立即播放免费毛片一级| 亚洲人成网亚洲欧洲无码久久| 99热这里有免费国产精品| 亚洲欧美日韩中文无线码 | 大地资源在线观看免费高清| 国产精品久久久久久亚洲小说 | 在线播放免费人成视频网站| 久久精品国产亚洲AV麻豆王友容| 免费人成在线观看69式小视频| 亚洲a∨无码一区二区| 国产亚洲精品xxx| 啦啦啦www免费视频| 三年片在线观看免费|