狠狠撸

狠狠撸Share a Scribd company logo
FRS 文件库介绍 潘俊勇 易度  everydo.com
2002 年 我开始推广 Plone
世界级的 Plone
做什么? 内容管理 CMS: 网站内容管理  ( 做网站 ) 公司内容管理 文档管理 档案管理 数字资产
( 此处略去辉煌若干 )
2007 年 全面放弃 Plone
为什么?
让我们换个思路。。。
我们曾经一无所有
若干年的努力
不断做加法
实现了 现代化
但我们的心灵 是否能真正得以休养?
我们的新世界 更加复杂 依赖更多 消耗更多 管理成本很高 … .
我们 不能没有电 不能没有互联网 不能没有 qq 不能没有那么多的服务机构 不能没有……
任何一个环节 崩溃之时 数据还能取出吗 工作还能继续吗 我们的生活?
(思考 ing)
我们需要什么?
功能都是浮云 世界变化快的 都在过时 ing
内容才是永久的财富 (心灵才是呵护之本)
读取内容的依赖 下面任何一个环节出问题就玩完 文件系统 操作系统 数据库服务器 应用服务器 上层应用
做减法
什么是理想之所?
Sphnix:  异军突起 简单、规范化的内容编写格式 放入版本库! 生成静态的网站 http://sphinx.pocoo.org/
一时间, 多少技术网站倒戈…
Sphinx 的定位 程序员写文档 发布到网站
管理更多内容? 文件、网页、视频、音频、 打包文件、 office 文档
支持更多功能? 版本、回收站、快捷方式、 元数据、格式转换
面向大众? 非程序员
FRS 诞生 ( 其实早于 Sphinx)
解决内容存储的问题 更简单、更可靠、更可扩展
直接利用文件系统存储 数据库是浮云
文件系统也是浮云 FAT32 , NTFS , EXTn , HDFS
混乱着呢
文件路径问题 路径格式 C:indows /home/panjy/docs FAT32 路径只支持 256 个字符 NTFS 上,支持 3200 长度 但路径必须用: ?:indows 路径编码各异 mbcs utf-8
Link 的支持 硬盘空间不够?使用 Link 来扩展 ext2 :  支持 FAT32 :不支持 NTFS :支持,但不方便
windows 更多问题… 读文件必须采用 rb ! 被使用文件不能移动 (windows error 32) …
分布式文件系统? Hadoop 的分布式文件系统 HDFS 原生是 java 的接口 接口使用差异非常大
杯具的 Python 文件操作封装 分散在三个包: os os.path shutils
能否统一? 让内容有可靠的栖身之所?
亮剑   FRS : File Repository System
FRS 特点 一个简单的 python 文件操作软件包 虚拟文件系统:统一的文件路径 统一的文件操作 元数据 回收站 版本 缓存 可扩展…
建立虚拟文件系统 VFS = Virtual File Systeme 统一文件的路径 通过配置文件,设置虚拟文件路径和实际存储位置的映射关系 统一基本文件操作
神奇的 .frs 文件夹
元数据 . frs/abc.txt/metadata.json { "main": { "right_col":"", "left_col":"", "contenttype":"document" }, "dublin": { "description": "", "title": " 易度云办公平台 ,  互联网时代的新型 OA" } }
多版本 .frs/abc.txt/archived/1.txt
回收站 .frsremoved 按照文件夹和删除时间区分
缓存文件 Pdf->html Doc->html Doc->text Zip 解压… . … 上述文件可由原始文件生成,丢失也不可怕 因此备份策略不同
理解 3 种 path ospath :  文件系统的路径 vpath :  虚拟文件系统的路径 site_path :  应用的路径(网站的路径) 转换: vpath = frs. sitepath2Vpath(site_path) ospath = frs.ospath(vpath)
配置 :frs.conf [cache] path = /var/everydo-frscache [root] sites = /var/everydo-frs members=/var/home [site] /=/sites /members=/members
初始化 from zopen.frs.core import loadFRSFromConfig frs = loadFRSFromConfig(file(frsconf).read())
基本使用 frs.listdir() frs.dirs() frs.joinpath() frs.exists frs.basename frs.walk …
元数据 def getMetadata(self, vpath): def saveMetadata(self, vpath, metadata_body):
版本管理 ? ?  def archive(self, path, id=None, **archiveInfo): ? ? def listArchives(self, path): ? ? def getArchiveInfo(self, path, archivename): ? ? def copyArchive(self, path, archiveName, dstPath): ? ? def removeArchive(self, path, archiveName):
回收站 def recycleAssets(self, path, srcNames): def listRemoves(self, path): def listRemovedAssets(self, path, removeName): def revertRemove(self, path, removeName, assetNames=[? ? def realRemove(self, path, removeName, assetNames=[]):
数据缓存 def getCacheFolder(self, vpath, cachename=None):  def hasCache(self, vpath, cachename=None):  def removeCache(self, vpath,cachename=None):  def moveCache(self, src, dst):  def copyCache(self, src, dst, **kw):
源代码 zopen.frs.core FRS 文件库核心包 http://code.google.com/p/zopen-frs zopen.cms 一个使用 frs 管理内容的简单内容管理系统 充分利用 restructuredText http://code.google.com/p/zopen-cms/
使用案例 网站 : http://czug.org http://everydo.com http://zopen.cn http ://benky.czug.org 易度文档管理系统 (http://edodocs.com)
还需要 Plone 吗 不需要了 如释重负了
Thanks ?

More Related Content

贵搁厂文件库介绍