Debian下使用Subversion(SVN)来管理Nginx Web网站发布

前面一篇文章讲解了如何不依赖Apache来直接使用SVN,这里我将讲解如何利用SVN来管理网站的发布,这次环境仍然是Debian,预装了SVN和Nginx,SVN服务已经启动,版本库已经建立并完成项目提交,假设我们拥有的版本库及项目路径为/home/user/repos/project1,web发布路径为/home/user/www/project1,这里的project1为Web项目,那么当我们在客户端将Web项目代码提交(commit)到project1代码库中时,能否自动更新/home/user/www/project1的Web发布路径的内容呢?

当然是可以的,首先我们需要checkout一次,把库的文件checkout到Web路径下:

cd /home/user/www
svn co svn://localhost/project1 --username bob --password 123456

其次是修改hooks目录下的post-commit文件以完成提交后挂钩,按上文所述,这个文件应该位于版本库中 /home/user/repos/project1/hooks ,如果没有则建立一个,内容如下:

#!/bin/sh 
# /home/user/www/project1为我们的web发布路径
svn up /home/user/www/project1 --username bob --password 123456 --no-auth-cache

注意 --no-auth-cache ,否则会提示验证信息 ATTENTION! Your password for authentication realm 导致执行失败。

最后为post-commit文件增加执行属性:

chmod +x post-commit

完成上述步骤后,试试从客户端提交代码到版本库中,看看Web内容是不是也改变了?

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • nginx
  • Linux
  • debian
  • svn

Debian不使用Apache直接架设Subversion(SVN)服务器

低配置的Debian服务器,想架设个Subversion(SVN)服务器用来托管部分代码,服务器上原先装有Nginx,网上大多数配置SVN的都要求结合Apache使用,低配服务器为这个装个Apache略显夸张,于是经过一段摸索,找到了一个方法,可以不使用Apache服务程序,记在这里留做备忘。

1. 首先是安装Subversion,直接使用apt-get命令:

sudo apt-get install subversion subversion-tools

2. 建立SVN仓库,假设代码仓库位于home路径下的repos文件夹,项目名称为project1:

mkdir ~/repos
svnadmin create ~/repos/project1

3. 修改配置文件 ~/repos/project1/conf/authz 添加授权认证信息,比如将bob加入管理员组,并对其添加读写权限,内容如下:

[groups]
admin=bob # 将bob添加到admin组 
[/] 
bob = rw  # 成员bob对/目录的权限:r读,w写

4. 修改配置文件 ~/repos/project1/conf/passwd 添加用户密码,比如设置bob的认证密码,可以像下面这样:

[users] 
bob = 123456
Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • Linux
  • debian
  • svn

一些日常计算机问题的处理方法整理(随时更新)

这里记载一些常用的解决计算机问题的方法、脚本或者小程序,留着备用,本文可能随时更新。

1. Windows XP 下恢复开始菜单任务栏的初始状态,之前帮一个客户恢复任务栏位置时用到的,主要是开始菜单任务栏位置不在底部,当然通过鼠标拖动的方式可以解决,不过大家也可以尝试[download id="1138"]脚本,由Kelly Theriot and Doug Knox提供。

2. Windows XP 下共享的设置(设置或者不设置密码的共享),包括以下设置批处理或者注册表文件(打包下载[download id="1140"]),来源不详:

开通局域网共享(访问本机无需验证即可进入).cmd
开通局域网共享(访问本机无需验证即可进入).reg
开通局域网共享(访问本机要填用户名和密码).cmd
开通局域网共享(访问本机要填用户名和密码).reg
关闭局域网共享.cmd
关闭局域网共享.reg
(仅供备用)硬盘各分区的默认共享:打开(原版XP本来就是开的).reg
(仅供备用)硬盘各分区的默认共享:关闭.reg
Posted in:
  • 计算机应用及维护
  • Windows系统
Tagged
  • 系统设置

Win7 64位编译Python扩展解决"error: Unable to find vcvarsall.bat"问题

之前使用Win32系统,系统上安装有Visual Studio 2010以及相应的SDK,然后Python编译扩展命令 python setup.py install 但命令总是失败,出现 error: Unable to find vcvarsall.bat ,比如编译py-bcrypt扩展:

running install
running bdist_egg
running egg_info
writing py_bcrypt.egg-info\PKG-INFO
writing top-level names to py_bcrypt.egg-info\top_level.txt
writing dependency_links to py_bcrypt.egg-info\dependency_links.txt
reading manifest file 'py_bcrypt.egg-info\SOURCES.txt'
writing manifest file 'py_bcrypt.egg-info\SOURCES.txt'
installing library code to build\bdist.win-amd64\egg
running install_lib
running build_py
running build_ext
building 'bcrypt._bcrypt' extension
error: Unable to find vcvarsall.bat
Posted in:
  • 计算机应用及维护
  • VBScript/JavaScript/Python
  • Windows系统
  • 系统应用程序开发
Tagged
  • vs2010
  • python
  • python扩展

Windows下使用mingw32编译Python扩展py-bcrypt及使用patch文件备忘

项目在Windows下构建,某个密码哈希加密模块使用了 py-bcrypt ,可惜的是官方只提供了C语言源代码,没有现成的Windows二进制包,我还翻阅了 《Unofficial Windows Binaries for Python Extension Packages》 也没找到现成的包,当然这个对于Linux系统不成问题,按部就班的安装就OK啦,可是Windows下遇到了些麻烦,比如 error: Setup script exited with error: Unable to find vcvarsall.bat 错误,于是我采用mingw32进行编译,当然如果你的电脑上没有安装mingw32,可以参考下面的步骤, [来源]

1. 点击 这里下载 最新版本的MinGW,并安装。

2. 设置PATH环境变量,比如你装在 C:\MinGW 路径下,你需要在PATH环境变量中添加 C:\MinGW\bin 路径。

Posted in:
  • 计算机应用及维护
  • VBScript/JavaScript/Python
  • Windows系统
  • 系统应用程序开发
Tagged
  • python
  • python扩展

ASP/VBScript模拟实现PHP extract()函数将字典集合转换为对象

写过PHP的都知道,其有个 extract() 非常方便,可以便捷的将字典转换为变量,当然到ASP中则要受限很多,特别是VBScript脚本,本文叙述的就是一种转换的思路,可以实现类似的功能。

首先需要我之前公布的一个类 DynamicObject (最新版本的),大家可以移步 这里 找到相应的代码和说明。

了解了 DynamicObject 类和其工作原理后,下面我就直接提供ASP版本的extract代码吧:

'
' ASP/VBScript Dictionary extract
' Author: WangYe
' For more information please visit
'     http://wangye.org/
' This code is distributed under the BSD license
'
' collection 集合或者字典,可以通过For Each访问的
'            Request.Form 或者 Request.QueryString
' specified  指定必须存在的属性,假如该属性不存在,将自动创建一个
' prefix     每个属性的前缀修饰
' callback   对于集合或者字典的每个元素(key-value)的值进行函数调用
'            函数原型:
'            Function filter(key, value)
'                filter = value
'            End If
'            最终值将以该函数返回的值为准
' 
Function extract(collection, ByVal specified, prefix, callback)
    Dim VarName, VarValue, DynObj, searchKey
    specified = "," & Replace(specified, " ", "") & ","
    
    Set DynObj = New DynamicObject
    For Each key In collection
        searchKey = "," & key & ","
        If InStr(1, specified, searchKey, 1)>0 Then
            specified = Replace(specified, searchKey, "")
            If Left(specified, 1) <> "," Then
                specified = "," & specified
            End If
            If Right(specified, 1) <> "," Then
                specified = specified & ","
            End If
        End If
        
        VarName = prefix & key
        
        VarValue = collection(key)
        If callback<>"" Then
            VarValue = GetRef(callback)(key, VarValue)
        End If
        
        DynObj.add VarName, VarValue, PROPERTY_ACCESS_READONLY
	Next
    
    specified_array = Split(specified, ",")
    Dim i
    For i = LBound(specified_array) To UBound(specified_array)
        If specified_array(i)<>"" Then
            DynObj.add prefix & specified_array(i), "", _
		PROPERTY_ACCESS_READONLY
        End If
    Next
    Set extract = DynObj.GetObject()
End Function
Posted in:
  • 网络编程与数据库
  • VBScript/JavaScript/Python
  • Web开发及相关
  • 系统应用程序开发
Tagged
  • asp
  • dictionary字典
  • vbscript

利用OpenSSL创建自签名的SSL证书备忘

之前申请的StartSSL免费一年的证书到期了,考虑到我对SSL一般仅用于博客登录和后台管理上面,所以不打算续申请,自己创建一个就足够了。

本来想使用Windows下的makecert实用工具创建的,结果折腾了很久导入到Linux服务器上,服务器没有正确识别,遂放弃,转而使用OpenSSL,收集了网上的一些材料,通过下面的方法创建成功:

1. SSH登录到服务器,使用下述命令创建根证书的私匙:

openssl genrsa -out ca.key 2048

网上很多是使用了1024,我这里强度加强到了2048。

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • ssl
  • openssl

Python数据库ORM SQLAlchemy 0.7学习笔记(7) 关系

前面介绍了关于用户账户的 User 表,但是现实生活中随着问题的复杂化数据库存储的数据不可能这么简单,让我们设想有另外一张表,这张表和 User 有联系,也能够被映射和查询,那么这张表可以存储关联某一账户的任意数量的电子邮件地址。这种联系在数据库理论中是典型的1-N (一对多)关系,用户表某一用户对应N条电子邮件记录。

之前我们的用户表称为 users ,现在我们再建立一张被称为 addresses 的表用于存储电子邮件地址,通过Declarative系统,我们可以直接用映射类 Address 来定义这张表:

>>> from sqlalchemy import ForeignKey
>>> from sqlalchemy.orm import relationship, backref

>>> class Address(Base):
...     __tablename__ = 'addresses'
...     id = Column(Integer, primary_key=True)
...     email_address = Column(String, nullable=False)
...     user_id = Column(Integer, ForeignKey('users.id'))
...
...     user = relationship("User", backref=backref('addresses', order_by=id))
...
...     def __init__(self, email_address):
...         self.email_address = email_address
...
...     def __repr__(self):
...         return "〈Address('%s')〉" % self.email_address
Posted in:
  • 网络编程与数据库
  • Web开发及相关
Tagged
  • 数据库
  • 学习笔记
  • python
  • ORM
  • SQLAlchemy

Python数据库ORM SQLAlchemy 0.7学习笔记(6) 查询

1. 返回列表和标量(Scalar)

前面我们注意到 Query 对象可以返回可迭代的值(iterator value),然后我们可以通过 for in 来查询。不过 Query 对象的 all() one() 以及 first() 方法将返回非迭代值(non-iterator value),比如说 all() 返回的是一个列表:

>>> query = session.query(User).\
>>>         filter(User.name.like('%ed')).order_by(User.id)
>>> query.all() 
SELECT users.id AS users_id,
        users.name AS users_name,
        users.fullname AS users_fullname,
        users.password AS users_password
FROM users
WHERE users.name LIKE ? ORDER BY users.id
('%ed',)

[User('ed','Ed Jones', 'f8s7ccs'), User('fred','Fred Flinstone', 'blah')]
Posted in:
  • 网络编程与数据库
  • Web开发及相关
Tagged
  • 数据库
  • 学习笔记
  • python
  • ORM
  • SQLAlchemy

Python数据库ORM SQLAlchemy 0.7学习笔记(5) 查询

前期我们做了充足的准备工作,现在该是关键内容之一查询了,当然前面的文章中或多或少的穿插了些有关查询的东西,比如一个查询(Query)对象就是通过 Session 会话的 query() 方法获取的,需要注意的是这个方法的参数数目是可变的,也就是说我们可以传入任意多的参数数目,参数的类型可以是任意的类组合或者是类的名称,接下来我们的例子就说明了这一点,我们让 Query 对象加载了 User 实例。

>>> for instance in session.query(User).order_by(User.id): 
...     print instance.name, instance.fullname
SELECT users.id AS users_id,
        users.name AS users_name,
        users.fullname AS users_fullname,
        users.password AS users_password
FROM users ORDER BY users.id
()

ed Ed Jones
wendy Wendy Williams
mary Mary Contrary
fred Fred Flinstone
Posted in:
  • 网络编程与数据库
  • Web开发及相关
Tagged
  • 数据库
  • 学习笔记
  • python
  • ORM
  • SQLAlchemy

© Wang Ye / 王 晔. All rights reserved.