nighty

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

          posted @ 2011-03-09 16:48 寒武紀 閱讀(13763) | 評論 (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.6rubygems1.3.5rake 0.8.3rack 1.0.1I18n 0.4.2rails 2.3.5

               
          2.  yum安裝ruby

          使用yum安裝ruby相關的軟件

          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/ 目錄下創建yum源文件ruby.repo,內容如下:

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

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

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

          升級ruby

          yum --enablerepo=ruby update ruby

          4.  安裝rubygems1.3.5

          因為直接通過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

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

          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

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

          cd config

          cp database.yml.example database.yml

          vi database.yml

          添加如下內容:

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

          數據庫要預先創建好,如果你裝好了mysql,直接運行mysql -uroot -p 登錄,然后create database redmine,主機名、用戶名、密碼也要寫對。

          10.   生成會話密鑰

           rake config/initializers/session_store.rb

          11.  rails數據庫生成和數據初始化

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

          12.  運行測試

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

          ruby script/server -e production &

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

          但這樣只是以獨立的方式啟動redmine的服務器,在后臺執行,有些不足,因為客戶端的訪問日志會在終端上直接顯示。并且你退出終端時,服務器進程也會跟著關閉,后面再介紹啟動和關閉腳本的編寫,以及如何用nginx做反向代理,或是用Apache也可以,這個網上可以搜索到很多資料。

          13.  附注:redmine默認端口是3000,如果你是遠程操作,直接訪問主機的IP或是域名是無法打開主頁的,因為centosiptables默認是沒有開通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的安裝,過程比較繁瑣,主要是各種組件和模塊的版本匹配問題。大多數情況下根據安裝的錯誤提示和Google就可以解決滴。

           

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

                  非常喜歡這種輕量級的JDBC封裝,比起Hibernate和iBatis,可以非常自由和靈活地運用和自行二次封裝,由于dbutils的BeanHandler轉換方式采取了反射技術,在性能上肯定有所損失,所以項目中基本上都使用MapHandler方式來轉換數據,當然就是自己寫的代碼多一點,也無所謂。一般的查詢、子查詢、聯合查詢、包括視圖查詢等等都很正常,但是發現一個比較小的問題,就是在使用聚合函數的場所,例如:select user_type, count(*) as count from `user` group by user_type這種類型查詢的時候,MapHandler方式不起作用,as列都變成key為空串的K-V對,導致有許多地方使用map.get("")代碼的情況出現,這種寫法當然是不太好的,容易出問題。
                  鑒于前面沒有時間了解,就都粗略使用了上面那種粗暴的map.get("")來處理,最好的情況是讓dbutils組件能自動識別到as類型的列名。于是有空了就專門看了看它的源代碼,發現最主要的一段代碼如下:
           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自定義的一個Map,忽略鍵大小寫的K-V字典,但是key使用的是ResultSetMetaData.getColumnName(),我想問題大概出在這里,于是認真翻了翻java的api文檔(開發做久了容易遺忘基礎),果然,原來getColumnName()是:獲取指定列的名稱;而as關鍵字之后,使列名稱變成用于顯示的意義,這個時候應該使用getColumnLabel():獲取用于打印輸出和顯示的指定列的建議標題。建議標題通常由 SQL AS 子句來指定。如果未指定 SQL AS,則從 getColumnLabel 返回的值將和 getColumnName 方法返回的值相同。自己手動試驗了一下,果然如所料,問題就出在這里。
                  所以呢,如果想要dbutils在自動轉換Map及MapList時能識別聚合函數的列名,那么最好的做法就是重載這種方式,懶一點的,你就干脆修改上面那段代碼,讓它判斷是否使用了as關鍵字。個人暫時搞不清楚官方為什么沒有考慮這一步,有時間再思考一下!

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

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

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

                   由于redirectAction使用的是ActionMapper來重定向,也就同時使用ActionMapper的編碼方式重新進行編碼,這就導致了后面在取出參數時變成亂碼,沒有具體閱讀它的源代碼,但是多次不同的編碼再想重新還原出來就有點麻煩了。而redirect是使用HttpServletResponse來重定向,就不存在上面的問題。最后改為redirect來重定向,結果如下:
          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對應的Action必須對msg參數做一次轉碼,因為前面的Action過來時就做了URL base64編碼,如果直接發給瀏覽器,就會在瀏覽器看到一串帶%的URL base64編碼字符,所以要加上
          1String msg = URLDecoder.decode(getMsg(), "UTF-8");
          2setMsg(msg);
                 把它設置回為中文,瀏覽器才能正常。

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

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

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

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

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

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

               摘要:   閱讀全文

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

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

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

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

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

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

               摘要:   閱讀全文

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

          Java環境安裝
              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文件拷貝這個目錄里面,設置權限為可執行類型:chmod a+x jre-6u6-linux-i586.bin
              3. 啟動安裝過程。鍵入:./jre-6u<version>-linux-i586.bin。接下來會提示二進制的許可協議,鍵入yes回車即可。安裝過程如果遇到一些問題,都同樣鍵入yes就可以。
              4. 一路下來,最后看到Done字樣,就完成了Java環境的安裝。安裝的位置就是當前目錄 /usr/java,當然你可以選擇在別的位置。可以用ls命令查看一下是否正常。

          環境變量配置
             上面安裝完畢后,直接在shell里面輸入java是不起作用的,需要先配置一下環境變量。一般都會用export命令,不過這樣設置只對當前shell起作用,重啟或是切換到別的shell會話就不起作用了。可以選擇配置 .bashr文件。用vi或是gedit打開,在末尾添加下面的內容
             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里面試驗一下是否安裝成功。echo一下各個變量是否正常,然后輸入java -version看看。
            還有一種方式是修改/etc/profile,這樣相當于修改系統配置文件,對所有用戶都有影響,我在嘗試的過程可能輸入了一些異常字符,導致整個ubuntu無法用GUI登錄,無奈只能用文本登錄,然后再次把profile改回來才正常。
             好了之后可以先試一下用vi新建一個Hello的Java文件,然后編譯一下試運行。

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

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

          僅列出標題
          共4頁: 上一頁 1 2 3 4 下一頁 
          主站蜘蛛池模板: 天镇县| 台南县| 原平市| 保定市| 南平市| 哈巴河县| 南阳市| 安阳县| 汝南县| 黑龙江省| 塔河县| 耿马| 宜川县| 封丘县| 天台县| 三都| 泗洪县| 天津市| 金湖县| 铜川市| 榆社县| 枣阳市| 芒康县| 长武县| 伽师县| 肥东县| 偃师市| 新乡县| 临高县| 景洪市| 平定县| 巴林右旗| 吴江市| 砀山县| 高清| 韶山市| 鄂州市| 金溪县| 黄石市| 慈溪市| 司法|