Archive

‘程式設計’ 分類過的Archive

Mercurial 的WEB界面安裝

2011年2月16日 尚無評論

簡單記一下這次安裝版本控制系統的過程

版本控制是用 Mercurial 這套
安裝基本上就是用指令線上安裝即可:

$ sudo apt-get install mercurial

基本的指令用法可直接看官網 Guide

接著就是建立一個可以用瀏覽器直接查看程式碼及各版本內容的環境
參考資料也是從官網而來:Serving Mercurial repositories with Apache and mod_wsgi

這裡需要的環境是

  • Apache (2.2.6, 2.2.3)
  • mod_wsgi (1.1, 2.0)
  • Python (2.5.1, 2.4.4)
  • Mercurial (1.1)
  • hgwebdir.wsgi

Apache和Python就不用再多說明,而mod_wsgi是需要手動安裝的,這在 在現有Apache2再安裝新的module – mod_wsgi.so 可以看到我之前的註記,當然現在版本是又更新了。

有了 module 後,接著就是設定 Apache 及文件環境

首先是先建立一個目錄
以我的習慣是在 /home/andy/www 下建立一個 hg 目錄
再 softlink 到 /var/www/ 底下

$ cd ~/www
$ mkdir hg
$ cd hg
$ mkdir cgi-bin

其中 hg 就是網站根目錄
底下的 cgi-bin 是之後要放cgi的目錄

接著是要找到 hgweb.wsgi 這個檔案,這個檔案是 Mercurial 提供的一個 sample
以我的環境是在 /usr/share/doc/mercurial/examples/hgweb.wsgi
把這個檔 copy 到 www/hg/cgi-bin

$ cd cgi-bin
$ sudo cp /usr/share/doc/mercurial/examples/hgweb.wsgi hgwebdir.wsgi

然後修改裡面的內容:

# An example WSGI for use with mod_wsgi, edit as necessary
# See http://mercurial.selenic.com/wiki/modwsgi for more information

# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "/var/www/hg/cgi-bin/hgweb.config"

import os
os.environ["HGENCODING"] = "UTF-8"

# Uncomment and adjust if Mercurial is not installed system-wide:
import sys; sys.path.insert(0, "/path/to/python/lib")

# Uncomment to send python tracebacks to the browser if an error occurs:
import cgitb; cgitb.enable()

# enable demandloading to reduce startup time
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir
application = hgwebdir(config)

其中第5行的 config 內容:

[web]
# paper, monoblue, spartan, gitweb, static
style = monoblue

contact = Andy
description = 專案說明文字
name = 專案名稱
allow_archive = gz, zip, bz2

[paths]
RDLAB3 = /home/andy/www/rdlab3

[collections]
# www = /home/andy/www

[hooks]
changegroup =
# reload wsgi application
changegroup.mod_wsgi = touch /var/www/hg/cgi-bin/hgwebdir.wsgi

其中第19行,指定的路徑必需是 wsgi 檔的完整絕對路徑,即使 config 檔是和 wsgi 檔是放在相同目錄,也要指定完整絕對路徑!!

這些設定完成後,得把 www/hg 整個目錄權限修改一下,也要 softlink 到 /var/www 底下:

$ cd ~/www
$ sudo chown www-data:root hg -R
$ cd /var/www
$ sudo ln -s ~/www/hg/ .

設定 vhost:

<VirtualHost *:80>
     ServerName hg.nb3vm.com

     ServerAdmin rdandy@gmail.com

     DocumentRoot "/var/www/hg/"

     WSGIScriptAliasMatch ^(.*)$ /var/www/hg/cgi-bin/hgwebdir.wsgi$1

    <Directory "/var/www/hg/">
        Options -Indexes MultiViews FollowSymLinks

        AllowOverride None

        Order allow,deny
        Allow from all
    </Directory>

    <Directory /var/www/hg/cgi-bin>
        Options ExecCGI FollowSymlinks
        AddHandler wsgi-script .wsgi
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.hg.log
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.hg.log combined
</VirtualHost>

然後就會看到專案列表了!

Categories: Python, uBuntu Tags: , ,

Zend Framework DOCTYPE!

2011年2月15日 1 則評論

現行最普遍好用的DOCTYPE是 XHTML1_TRANSITIONAL

XHTML11:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

XHTML1_STRICT:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

XHTML1_TRANSITIONAL:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

XHTML1_FRAMESET:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

XHTML1_RDFA:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">

XHTML_BASIC1:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">

HTML4_STRICT:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

HTML4_LOOSE:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

HTML4_FRAMESET:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

HTML5:
<!DOCTYPE html>

Zend Framework 產生 FORM

2011年1月21日 尚無評論

產生留言版的 FORM

指令:
zf create form Guestbook

andy@nb3vm:~/www/rdlab/application$ zf create form Guestbook
Creating a form at /home/andy/www/rdlab/application/forms/Guestbook.php
Updating project profile ‘/home/andy/www/rdlab/.zfproject.xml’

產生 application/forms/Guestbook.php

編輯一下原本的內容修改成我們需要的,如下:

<?php
class Application_Form_Guestbook extends Zend_Form
{

    public function init()
    {
        /* Form Elements & Other Definitions Here ... */
        // Set the method for the display form to POST
        $this->setMethod('post');

        // Add an email element
        $this->addElement('text', 'email', array(
            'label'      => 'Your email address:',
            'required'   => true,
            'filters'    => array('StringTrim'),
            'validators' => array(
                'EmailAddress',
            )
        ));

        // Add the comment element
        $this->addElement('textarea', 'comment', array(
            'label'      => 'Please Comment:',
            'required'   => true,
            'validators' => array(
                array('validator' => 'StringLength', 'options' => array(0, 20))
                )
        ));

        // Add a captcha
        $this->addElement('captcha', 'captcha', array(
            'label'      => 'Please enter the 5 letters displayed below:',
            'required'   => true,
            'captcha'    => array(
                'captcha' => 'Figlet',
                'wordLen' => 5,
                'timeout' => 300
            )
        ));

        // Add the submit button
        $this->addElement('submit', 'submit', array(
            'ignore'   => true,
            'label'    => 'Sign Guestbook',
        ));

        // And finally add some CSRF protection
        $this->addElement('hash', 'csrf', array(
            'ignore' => true,
        ));
    }
}

接著要將 signAction() 加到 GuestbookController 以處理 FORM 的遞送
用以下的方式建立 action並且關聯到 view 裡

andy@nb3vm:~/www/rdlab/application$ zf create action sign Guestbook
Creating an action named sign inside controller at /home/andy/www/rdlab/application/controllers/GuestbookController.php
Updating project profile ‘/home/andy/www/rdlab/.zfproject.xml’
Creating a view script for the sign action method at /home/andy/www/rdlab/application/views/scripts/guestbook/sign.phtml
Updating project profile ‘/home/andy/www/rdlab/.zfproject.xml’

經由執行結果看到新增了一個 signAction() 方法到 controller 以及相對應的 view 內容。

閱讀全文…

Categories: PHP, Zend Framework Tags: ,

Zend Framework 建立 Layout

2011年1月21日 尚無評論

建立 Layout

專案在設計時,我們要專注於每個區塊及其功能,於是在留言版範例,我們頁面 view 的 script 只有要顯示的內容 html 部份,而不是完整頁面的 html,當我們要產生完整的 html 時,我們需要一個全域的網站 layout。

在此我們使用 Zend_Layout 來完成這件事。

要產生這個設定,可以用 zf 指令來設定,如下:

andy@nb3vm:~/www/rdlab/application$ zf enable layout
Layouts have been enabled, and a default layout created at
application/layouts/scripts/layout.phtml
A layout entry has been added to the application config file.

就會在 application/configs/application.ini 裡產生設定

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

這個設定,是告訴 application 要在 application/layouts/scripts 下尋找 layout

以我的例子來看就會是在 application/layouts/scripts/ 下產生了一個 layout.phtml

其內容如下:

<?php echo $this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Zend Framework Quickstart Application</title>
  <?php echo $this->headLink()->appendStylesheet('/css/global.css') ?>
</head>
<body>
<div id="header" style="background-color: #EEEEEE; height: 30px;">
    <div id="header-logo" style="float: left">
        <b>ZF Quickstart Application</b>
    </div>
    <div id="header-navigation" style="float: right">
        <a href="<?php echo $this->url(
            array('controller'=>'guestbook'),
            'default',
            true) ?>">Guestbook</a>
    </div>
</div>

<?php echo $this->layout()->content; ?>

</body>
</html>

這就是我們的全域 layout 的內容了。

閱讀全文…

Categories: PHP, Zend Framework Tags: ,

Zend Framework QuickStart MySQL version

2011年1月20日 尚無評論

由於官網的 QuickStart 是用 sqlite 來做示範,是檔案式的 DB,但我想直接以 MySQL 來做,因此找到了一篇 「zend – 建model與database 連結」的文章,參考的是 db-adapter 這段

先在 phpMyAdmin 增加 database 以及 user

database : rdlab_guestbook (成品用)
database : rdlab_guestbook_testing (測試用)
database : rdlab_guestbook_development (開發用)
user : username
password : 11111111

設定權限讓 username 都可以存取上面三個 database

設定成品用的database參數:
andy@nb3vm:~/www/rdlab/application$ zf configure db-adapter ‘adapter=PDO_MYSQL&dbname=”rdlab_guestbook”&host=”localhost”&username=”username”&password=”11111111″‘ production

設定測試用的database:
andy@nb3vm:~/www/rdlab/application$ zf configure db-adapter ‘adapter=PDO_MYSQL&dbname=”rdlab_guestbook_testing”‘ testing

設定開發用的database:
andy@nb3vm:~/www/rdlab/application$ zf configure db-adapter ‘adapter=PDO_MYSQL&dbname=”rdlab_guestbook_development”‘ development

閱讀全文…

Categories: PHP, Zend Framework Tags: