2016年3月16日 星期三

[windows] 殺掉佔住某個 port 的程序

今天在測試的時候,一個程式畫面死掉被關掉,但是程序(process)沒有被關掉,一直佔著。
總不能每次發生這種事的時候就重開電腦吧?
於是找了一下,有解!
救星就是 netstat。

使用以下指令:
netstat -a -n -o
會列出所有本機正在開啟的 port,還有 PID。
接下來就是用 task manager,找到那個程序,殺掉它。搞定!

參考:
http://stackoverflow.com/questions/8688949/how-to-close-tcp-and-udp-ports-via-windows-command-line

2016年3月15日 星期二

[python] django-cms 在 pythonanywhere 的安裝

django-cms 是基於 django 的 CMS (Content Management System,內容管理系統),可以快速建立可上線的網站、部落格…等等。它也是去年(2015 年)被選為最佳 CMS 的系統。(http://www.cmscritic.com/announcing-the-2015-winner-for-best-open-source-cms/)

PythonAnyWhere 則是一個服務商,可以提供以 python 為基礎的許多 web framework,例如 django。所以,在 PythonAnyWhere 上要提供一個 Django 網站是內建功能之一。其他的像 flask 或是 bottle 等 web framework 現在也支援。一般人可以申請免費服務試用,可以有 512 MB 的硬碟空間與 100 秒 cpu 時間。如果 100 秒 cpu 時間用完,其實還是可以正常運作,只是慢一點而已,拿來試用非常剛好。

把 django-cms 與 PythonAnyWhere 結合在一起是很簡單的。PythonAnyWhere 官方似乎沒有比較正式的說明,不過在經過測試之後,在 virtualenv 的環境上來做,應該會是比較好的選擇。

第一步,建立 virtualenv 環境
source virtualenvwrapper.sh
mkvirtualenv djangocms --python=python3 
在 PythonAnyWhere 上必須使用已經提供好 環境設定,所以要使用他們提供的 virtualenvwrapper.sh 與 mkvirtualenv 進入 virtualenv 的環境中。
如果要在 virtualenv 裡用到 python3,所以加上 --python=python3

如果要使用官方已經裝好的 numpy, scipy 的話,要加上這個參數 --system-site-packages。

執行完之後,就會停在 virtualenv 的環境裡:
(djangocms) 12:24 ~ $

第二步,安裝 djangocms-installer
現在 django-cms 是使用 djangocms-installer 來安裝,所以要先用 pip 安裝這個。
pip install djangocms-installer
第三步, 建立 djangocms 專案
這裡建議照我說的做,不然不小心會把自己的家目錄裡的東西砍光光。
首先,開一個目錄叫 project_name,然後進去。

(djangocms) 12:32 ~ $ mkdir project_name(djangocms) 12:33 ~ $ cd project_name/(djangocms) 12:34 ~/project_name $

然後使用以下指令建立專案:
(djangocms) 12:34 ~/project_name $ djangocms -p . my_demo

會開始問一些問題,基本上就一路按 enter,不然就照我的來選:
Database configuration (in URL format) [default sqlite://localhost/project.db]:
django CMS version (choices: 2.4, 3.0, 3.1, 3.2, stable, develop) [default stable]:
Django version (choices: 1.5, 1.6, 1.7, 1.8, 1.9, stable) [default stable]:
Activate Django I18N / L10N setting (choices: yes, no) [default yes]:
Install and configure reversion support (choices: yes, no) [default yes]:
Languages to enable. Option can be provided multiple times, or as a comma separated list. Only language codes supported by Django can be used here: en
Optional default time zone [default Etc/UTC]:
Activate Django timezone support (choices: yes, no) [default yes]:
Activate CMS permission management (choices: yes, no) [default yes]:
Use Twitter Bootstrap Theme (choices: yes, no) [default no]:
Use custom template set [default no]:
Load a starting page with examples after installation (english language only). Choose "no" if you use a custom template set. (choices: yes, no) [default no]: yes



然後就開始安裝到停下來。會要你輸入管理員的帳號、信箱、密碼。
Creating admin userUsername (leave blank to use 'ironman'): Email address: 在這裡輸入信箱Password: Password (again): Superuser created successfully.All done!


第四步,建立 web app
到 web 頁籤按下建立 web app 的按鈕,選擇 manual configuration。
設定 virtualenv 路徑設定到 /home/yourusername/.virtualenvs/djangocms。

import os
import sys
# add project folder to path
path = '/home/ironman/project_name'
if path not in sys.path:
    sys.path.append(path)
# Remove any references to your home folder (this can break Mezzanine)
while "." in sys.path:
    sys.path.remove(".")
while "" in sys.path:
    sys.path.remove("")
# specify django settings
os.environ['DJANGO_SETTINGS_MODULE'] = 'my_demo.settings'

# load default django wsgi app for Django >= 1.4
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
到 Static files 那裡設定:
Url: /static/
Path: /home/yourusername/project_name/static
第五步,修改 db 位置設定
因為用安裝器裝的設定,有一點不一樣,所以 db 位置它指錯了。
請到 project_name/my_demo/settings.py 裡,找到這裡:
DATABASES = {
    'default': {
        'CONN_MAX_AGE': 0,
        'ENGINE': 'django.db.backends.sqlite3',
        'HOST': 'localhost',
        'NAME': 'project.db',
        'PASSWORD': '',
        'PORT': '',
        'USER': ''
    }
}

把 'NAME': 'project.db' 改成 'NAME': 'project_name/project.db'

不改會出現錯誤:no such table: cms_urlconfrevision

再按下web app 的 Reload 按鈕。
瀏覽結果,這是有選範例首頁的樣子:

這是沒選範例首頁的樣子:


接下來就是怎麼使用它的問題了。這裡有「使用者」的說明文件。http://docs.django-cms.org/en/3.2.3/user/index.html

[python] mezzanine 在 pythonanywhere 的安裝

Mezzanine 是基於 django 的 CMS (Content Management System,內容管理系統),可以快速建立可上線的網站、部落格…等等。

PythonAnyWhere 則是一個服務商,可以提供以 python 為基礎的許多 web framework,例如 django。所以,在 PythonAnyWhere 上要提供一個 Django 網站是內建功能之一。其他的像 flask 或是 bottle 等 web framework 現在也支援。一般人可以申請免費服務試用,可以有 512 MB 的硬碟空間與 100 秒 cpu 時間。如果 100 秒 cpu 時間用完,其實還是可以正常運作,只是慢一點而已,拿來試用非常剛好。

把 Mezzanie 與 PythonAnyWhere 結合在一起是很簡單的。PythonAnyWhere 官方建議在 virtualenv 的環境上來做,也給了範例如下:

第一步,建立 virtualenv 環境

source virtualenvwrapper.sh
mkvirtualenv mezzanine
在 PythonAnyWhere 上必須使用已經提供好 環境設定,所以要使用他們提供的 virtualenvwrapper.sh 與 mkvirtualenv 進入 virtualenv 的環境中。
如果要在 virtualenv 裡用到 python3,要使用以下的指令替代上面第二行指令

mkvirtualenv mezzanine --python=python3
如果要使用官方已經裝好的 numpy, scipy 的話,要加上這個參數 --system-site-packages

執行完之後,就會停在 virtualenv 的環境裡:
(mezzanine)13:12 ~ $
第二步,安裝 mezzanine
接下來就是使用 pip install mezzanine 安裝。

第三步,建立網站專案
在經過一連串下載後,就是開始第一個專案來試用一下了。開第一個專案的指令是:
mezzanine-project project_name
cd project_name
接下來的動作是設定時區與建立資料庫內容。
首先在 settings.py 找到TIME_ZONE, 改成我們這裡的TIME_ZONE='Asia/Taipei'
然後執行以下指令:
python manage.py createdb --noinput
會在資料庫裡建立所需要的 table。預設使用的是 sqlite3 的資料庫。眼睛利一點的會看到管理者預設帳號密碼是 admin/default。等一下要用,真的要上線一定要去改密碼

第四步,設定 wsgi
PythonAnyWhere 與 mezzanine 的連結是靠 wsgi,請到 web 頁籤


建立一個按下建立 web app 的按鈕,選擇 manual configuration。
然後把 virtualenv 路徑設定到 /home/yourusername/.virtualenvs/mezzanine 。


找到 WSGI configuration file 所指的檔案連結按下去,改成以下這樣:
import os
import sys

# add project folder to path
path = '/home/yourusername/project_name':
if path not in sys.path:
    sys.path.append(path)

# Remove any references to your home folder (this can break Mezzanine)
while "." in sys.path:
    sys.path.remove(".")
while "" in sys.path:
    sys.path.remove("")

# specify django settings
os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.settings'

# load default django wsgi app for Django >= 1.4
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
然後按下web app 的 Reload 按鈕,接下來要處理 static 檔案。

第五步,設定 static 檔案
在 web 頁籤,到 Static files 那裡設定:

Url: /static/
Path: /home/yourusername/project_name/static

然後執行以下指令:
python manage.py collectstatic
這樣會把 static 的檔案搬到對的地方去。再按下web app 的 Reload 按鈕。

現在就可以瀏覽一下剛才的成果。

接下來,使用的方法就又是另一個問題了。