登录 帮助
打印
主页网关维基奶牛文件gatewiki.html网站
 

GATEWiki:用户和开发人员指南

拉森卡通

匆忙中?请参见快速启动部分.

目录

1介绍

文件和目录、文档和文件夹、磁盘和记忆棒、笔记本电脑游戏机、电视时间变换器和企业IT系统。数据数据到处都是,从来没有喝过一滴,就像古代水手不可能喝的那样梦想着说。如果能够将您的文件系统作为网站,能够在有网络和无网络的多台机器上进行编辑连接,以便能够拥有自己的本地副本并与共享朋友和同事,无需担心将其全部合并回来一起?

GATEWiki或CoW是一个“可控Wiki”和CMS,支持协作使用异步脱机编辑创建文档。CoW旨在实现易于向静态网站添加交互,并支持并发编辑和离线工作,使用简单的同步(使用Subversion)。该系统还可作为受控语言实验的试验台用于往返本体工程(来自GATE项目:网址:http://gate.ac.uk/).

GATEWiki基于Grails、Groovy、Subversion、,硒和爪哇,并托管在SourceForge上的GATEWiki项目.

2概述

Wiki是关于允许一群人创建和编辑用最少的努力和最少的软件学习将网页链接起来惯例和功能。通常,他们通过以下方式实现这一点

内容管理系统(CMS)提供持久性、版本控制和元数据管理、上传和浏览文档集和其他资源。

CoW与其他Wiki和CMS不同,因为:

为什么要另一个维基?当我们开始工作时,Java中没有可用的wiki可以发现有良好的SVN支持(我们的SVN中存储了55GB的数据存储库!)。使用SVN作为后端可以为我们提供:

CoW部分旨在成为一种新型网站,其中

(事实上,这可能根本不是一个维基,而是一种新型的有读写能力的数据库...)

该系统是根据GNU通用公共许可证版本3(GPL 3)除非另有说明。

三。用户信息

一般来说,使用GATEWiki应该很容易,不需要手册。要编辑例如,单击“编辑”链接。不过,有些事情有一些微妙之处,这里描述了这些。工作知识颠覆如果你想的话也会有帮助充分利用该系统。

3.1.快速入门

3.1.1.文件、目录和链接

GATEWiki网站位于文件和目录的普通树(例如,在GATE.ac.uk网站此页面位于/gatewiki/cow/doc/gatewiki.html.

什么时候?编辑和链接页面、图像或其他文件是对文件树的简单操作。例如,如果你想添加图像到这个页面,你可以点击“目录”链接,使用“Upload”将图像文件添加到此目录,然后将其放置在此通过从这里引用页面(也许通过键入%图像(your-new-image.png)编辑会话). 如果您以后想从不同的例如,该图像将在GATEWiki服务器上作为/gatewiki/cow/doc/your-new-image.png.

收件人链接到其他页面在同一目录中,只需使用文件名,例如。此链接指向“index.html”.

收件人链接到目录(它将是它的文件列表包含,或index.html文件(如果存在)只使用目录名,例如此链接指向“yam”子目录.

3.1.2。创建和编辑页面

收件人创建新页面首先导航到需要文件的目录(点击该目录中任何页面的“目录”链接)。您可以在两个位置看到目录名:

从目录视图中,可以使用创建新的wiki页面或新目录“新建页面”对话框。如果你给一个“.html”文件名,你将创建一个新的维基页面;如果您给出“name-without-dots”,您将创建一个新目录。(对于其他文件类型,请使用“上载”。)

收件人编辑页面只需在页面中单击“编辑”即可。你可以用普通的文字处理风格编辑器(“富编辑器”)或web表单。在后者中以大小写文本YAM公司,一种非常简单的标记语言.

要离线编辑目录树,只需从其存储库(您需要该存储库的位置和相关权限课程)。

3.1.3.删除和复制

文件和目录(及其内容)可以是删除通过目录查看:点击任意页面的“目录”链接,勾选要删除的条目,然后点击底部的“删除选定项”按钮(共页)。

正在复制维基页面的(和重命名)目前更为复杂(而且不支持复制目录)。要复制页面,请先编辑它,复制将文本粘贴到剪贴板,然后创建新文件,编辑并粘贴旧文件的内容。(要进行重命名,只需执行此过程,然后删除旧文件。)

不要使用所见即所得编辑器进行复制-只需使用表单编辑器(否则,您可能会丢失页面的所有格式)。

(我们还没有使复制变得更容易的一个原因是,您还可以使用任何颠覆客户端,其中有军团。)

3.1.4.上传其他类型的文件

如果您想上传纯HTML或PNG图像,或者其他什么,您可以使用目录视图中可见的“上传”链接。您可以上传的树目录并请求“unpack”选项。上传对话框允许您选择是否覆盖现有的文件夹。

3.1.5.寻找事物

GATEWiki通常支持搜索通过“搜索”框:只需键入然后按按钮。有关更复杂的查询,请参阅搜索结果页面底部的搜索语法描述或关于搜索的部分.

遵循我们的“一切都是目录树”哲学看见哪些文件位于何处等。

当您登录(并拥有权限)时,每个页面都有一个“目录”链接进入目录视图,就像文件和文件夹浏览器在您的桌面上。每个条目的类型由图标指示:

目录视图还提供对上传删除功能。

3.1.6.原始HTML页面与wiki页面

在GATEWiki中创建新网页时,会添加两个文件:

通常,您可以忽略此操作-编辑和删除操作例如,在页面上透明地工作。然而,GATEWiki也支持原始没有YAM源的HTML文件。同样,编辑等是透明的,但由于HTML存在更多的安全风险,因此相关的权限这些页面通常与普通的wiki页面不同,因此中这些页面的不同图标目录视图例如。

3.2、。模式

CoW有两种操作模式:

当您在自己的机器上使用CoW时,它将处于工作站模式;什么时候您正在另一台机器上通过web使用它,它将处于服务器模式。

3.3、。注册、登录

当CoW在服务器模式下运行时,有必要创建一个帐户并在被允许编辑页面之前登录。某些页面也不会除非管理员将您添加到适当的组。要注册,请转到登录页面并遵循注册链接。

3.4.创建新的wiki页面或目录

要创建新的wiki页面,您可以:

取决于您为页面选择的名称类型(或*.html格式或a名称中没有“.s”)GATEWiki将创建一个新的wiki页面或一个新页面目录。

要上载其他类型的文件,请参阅上传部分.

注意:由于技术原因,以下目录名当前为在主沙盒的顶级目录中不可用:

(这是可以修复的,但必须承受相当大的痛苦。)

3.5.编辑wiki页面

当您有权编辑正在查看的页面时,编辑链接将出现。有两种类型的编辑器可用:

  1. 所见即所得编辑器(FCK编辑)
  2. web表单页面

要在这些类型之间切换,请使用“切换到…”按钮。

使用1.时,通常可以忽略YAM语法并像在文字处理器中一样工作-例如,点击“B”按钮文本粗体,或““按钮使其倾斜等。完成后,点击保存按钮(它看起来像一张旧软盘)。有一个例外忽略YAM:因为编辑之后会转换回YAM,如果您在编辑中包含YAM语法,您需要逃跑它。通过将前面的反斜杠-例如。\*.

使用2时。使用YAM语法(这是一个短片总结,它也显示在窗体下方,而编辑,及以下).

在这两种情况下,当您完成编辑时2CoW将尝试签入您对父存储库的更改。此时,它会检查是否有其他用户在你一直在编辑它。如果是这样,他们的更改和你的更改将合并;如果文件的不同部分有更改,一切正常,合并的文件然后签入。但是,如果这些更改非常接近,则会对其进行判断将返回到编辑会话以解决冲突这场冲突。要查找文件中存在问题的部分,请搜索“====”;在这里,您可以找到文件中的内容以及已被其他用户编辑,您可以选择其中一个或另一个,也可以同时选择这两个随你喜欢。

注释:当您编辑非本地(非YAM,即没有GATEWiki的原始HTML)时版本)HTML文件GATEWiki将始终使用所见即所得编辑器。请注意目前,这有从文件中删除元标记的副作用标题。

3.6条。搜索

页面右上角提供了一个搜索框,允许在当前页面所属的wiki区域中搜索。在其他如果页面属于“帮助”部分,则只能从以下位置检索结果帮助部分。有关Solr查询语法的信息,请访问http://wiki.apache.org/solr/SolrQuery语法

给定一个查询,如果查询成功,单个查询最多显示10个结果第页。用户可以在的顶部或底部导航不同的页面链接搜索结果跳转到不同的结果集。搜索结果包括以下内容:

当前用户没有查看权限的页面的点击数为筛选出而不包含在搜索结果中。

3.7.报告错误

要报告错误,首先请检查它们是否尚未报告!

然后将报告添加到窃听虫跟踪器,包括有关您正在运行的平台的信息重现问题所需的详细信息。

3.8.YAM标记语言

CoW的底层标记语言是YAM(又一个标记)。你不需要使用它-您可以使用所见即所得编辑器-但如果您是维姆-像我一样挥舞着古老的化石,你可能会喜欢语法是最简单的;接下来是摘要,后面是较长的描述。

3.8.1.YAM总结

标题文件的第一段。
标题 %1,­%2等。;%1*未编号;后跟空白行
粗体、斜体、电传、下划线 *...*,_..._,^...^,__...__
目录 %目录
水平线 --
桌子 %[|第1行/第1列|r1/c2| --|r2/c1|r2/c2| %]
大宗报价 %"...%"
换行符 %br个
逐字逐句 %<...%>
代码

%代码(lang=Java)<。。。%>
为Java、XML等提供语法高亮显示。

列表

-项目1
-项目2
#编号的项目1
(用于嵌套,使用缩进)

脚注 %脚注(…)
逃逸 \
链接

小时网址:http://thing.com/%(小时网址:http://thing.com/)或
%(小时网址:http://thing.com/,链接文本)

%#name(然后用“%(#名称)“)
图像

%图像(文件)或
%图像(文件、alt标记、宽度、高度、位置、边框)
(第二个和后续参数是可选的)

引文 %引用(citekey,citekey,…)
包含

%include(文件.yam)
%include(level、useTitle、file.yam)

非破坏性空间 %\后跟空格
单行注释/注释 %%...
多行注释/注释%/*... %*/
特殊字符

(例如<或HTML中的&)是
在输出中正确翻译。

推特 %推特(title=GATE News,account=GateAcUk,name=GATE,count=10)
谷歌 %谷歌(siteip=gate.ac.uk)
元数据 %meta(author=My Name)成为HTML中的标记

3.8.2.YAM语法和用法

3.8.2.1。介绍

YAM(Yet Another Markup)是一种简单的维基语言,用于GATEWiki公司。语言语法如下所述。

3.8.2.2.目录

上述内容列表由“%目录'

3.8.2.3.粗体、斜体、下划线和电传打字

粗体文本包含在星号中:*这是粗体的*成为这是粗体的.

斜体文本包含在下划线中:_这是斜体_成为这是斜体.

固定宽度的文字包含在克拉符号中:^这是电传^成为这是电传.

带下划线的文本包含在双层底涂层中:__这有下划线__成为这有下划线.

3.8.2.4.水平线

水平线在一行的开头用3个或更多破折号表示。例如:

---

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

两者都会导致:


3.8.2.5。列表

无序列表在行的开头用“-”表示,并且是有序的按“#”列出。嵌套由项目前面增加的间距表示指示器。例如:

-这是一个无序列表-第二项#这是一个嵌套的。。。# ...有序列表-返回附件列表的第三项

结果如下:

嵌入列表缩进的精确大小无关紧要,只是需要大于封闭列表的值。

当存在空行或下一行文本不存在时,列表结束缩进。例如:

-这是一个单件清单然后-另一个单件清单。

结果如下:

然后

注意:表中嵌入的列表必须从新行开始,就像其他地方;在表中,如果列表以相同的开头,则会导致语法错误行作为行的其余部分。

3.8.2.6.逐字输出

逐字输出以“%<'并以'结尾%>'. 例如:

%<这将**得到翻译。%>

例如,当目标语言为HTML时,输出将包含“<pre>”标签。

对于代码清单,可以使用启用语法高亮显示

%代码(lang=Java)<公共void hello(){System.out.println(“hello world”);}%>

生产

公共void hello(){System.out.println(“hello world”);}
在HTML中使用谷歌-代码-设置和中LaTeX使用列表包裹。支持的语言名称列表为两个包裹略有不同(HTML格式,乳胶)但主流语言包括“C”、“Java”、“Python”、“HTML”、“XML”、“CSS”和“TeX”均受两者支持。将yam转换为HTML时(但不转换为LaTeX)荧光笔会尝试猜测合适的语言,如果你省略全部规范(%代码()<。。。%>).

默认情况下,列表没有行号。可以启用编号使用选项编号=开,加上可选第一个数字=N个如果你愿意从非1开始编号。注意,在HTML中,只有第五行默认编号谷歌-代码-设置CSS样式。

3.8.2.7。脚注

脚注如下:

%脚注(这是一个脚注。)

变为:4.

内容将放在文档末尾(HTML)或页面底部(LaTeX),并通过发生位置的数字链接。

3.8.2.8.逃跑

要阻止解释特殊字符,请使用“\'. 例如,

\---

不会生成行。

(这也适用于前引号或反勾号字符-`-哪个是在LaTeX中使用,但可能会被HTML中的普通单引号取代输出。)

3.8.2.9.标题和元数据

文件的标题是文件的第一段,以一段结尾或更多空白行。(这通常是一行文本。)

可以使用指定元数据%meta(foo=bar),在HTML中它将成为

<meta name=“foo”content=“bar”>

在页眉中。

3.8.2.10.标题

标题是以开头的行%1(对于第一级),%2,%3%4和后面是一个或多个空行。例如,此的标题节是

%1标题

如果标题级别后面跟着“*“它没有编号,例如:

%1*未编号标题

变为:

未编号的标题

此标题不会出现在目录表中。

3.8.2.11。连杆和锚

可以通过三种方式指定链接:

  1. 作为纯文本,例如“小时网址:http://gate.ac.uk/'将成为网址:http://gate.ac.uk/
  2. 使用“%(目标)',例如。%(小时网址:http://gate.ac.uk/)将成为网址:http://gate.ac.uk/
  3. 使用“%(目标,标签)',例如。%(小时网址:http://gate.ac.uk/,GATE主页)将成为GATE主页

的链接目标中的空格或逗号%(...)URL格式必须为逃脱。链接文本(在第一个未转义的逗号之后)可能包含“内联”Yam标记,例如%图像(…),%引用(…),*大胆的*,_斜体_^电传打字机^,但不是块级标记,如表。链接文本中允许使用括号,但左括号和右括号必须平衡,即。%(小时网址:http://example.com,一个(示例)链接)可以,但%(小时网址:http://example.com,不平衡(括号)除非不匹配括号被转义。

以纯文本形式显示的URL必须后跟空格、制表符或换行符。有时,您可能需要在URL后面添加空格以外的内容,制表符或换行符,例如应用其他格式字符时。待办事项使用括号形式。例如,电传输入URL,^%(小时网址:http://gate.ac.uk/)^成为网址:http://gate.ac.uk/.

使用“%#姓名'. 例如,

%1 A标题%#标签

将导致在锚之后出现航向标签.返回(或向前),在链接中使用“#”,例如。

%(#表,表)

将导致桌子.

锚内的空格或逗号必须转义。出现在中的锚纯文本后面必须跟空格、制表符或换行符。

指向非即时文件的相对链接将呈现为指向主机的链接应用程序的“创建”页面,例如。

%(../non-istant.html)

变为:
../non-istant.html

指向现有文件的链接将只是正常链接,例如。

%(index.html)

变为:
索引.html

3.8.2.12.大宗报价单

大宗报价附于%“标记。例如,

%“这是报价%”

变为:

这是一个报价

请注意,由于引号被视为普通单词,它们可能会导致重叠问题(与未闭合的粗体或斜体标记相同)。例如,

%"-列表%"

这不是一个好主意,因为报价的末尾会先于列表的末尾。解决方法是先通过添加空行关闭列表:

%"-列表%"

这就产生了一些合理的结果:

3.8.2.13.换行符

换行符表示为%br在一行的末尾。例如:

此行分为两行%br。

变为:
这条线断了
一分为二。

3.8.2.14.桌子

表格使用方括号、横线和破折号。例如:

%[|*标题列1*|*标题列2*|---|第1行第1列第2列---|第2行第1列|第2列|%]

结果如下:

标题栏1 标题栏2
第1行第1列第2列
第2行第1列第2列

要包括|在普通文本中,转义如下:\|.

(另请参见上文关于嵌入列表在表中.)

3.8.2.15.图像

图像类似于URL:

您还可以指定ALT标记、宽度和高度、位置和边框宽度:'%图像(test-image.png,ALT标记,500,500,left,0)'成为ALT标签

3.8.2.16.引文

引文的作用是这样的:%引用(Cun06a)'成为村06a.多个引用键应该用逗号隔开,例如:'%引用(Cun05a,Cun06a)'成为存05a,村06a.

3.8.2.17.包含

一个页面可以包含另一个页面,如下所示:

%包括(yam-first.yam)

这将导致包含来自的所有文本山药-第一山药在这个文件。

要添加到标题级别的增量可以作为第一个参数。

请注意,默认情况下会忽略所包含文件中的标题。A类可以指定“useTitle”标志(如果存在,则在增量之后),以使包含标题(作为标题)。例如:%包括(1,useTitle,山药).

3.8.2.18.非破坏性空间

使用添加非中断空格%\后跟空格,例如。

此行%\%\%\中间有空格。

此行中间有空格。

3.8.2.19.评论

单行注释由两个或多个百分比共同创建,例如。

这不是评论%%,但这是

变为:
未对此发表评论

多行注释由%创建/*和%*/,例如。

这不是评论%/*,但这是而且这个比例太高了*/

变为:
未对此发表评论

3.8.2.20.插件

YAM可以通过使用插件。创建插件需要一些Java编程-有关更多详细信息,请参阅开发人员指南。

与GATEWiki捆绑的插件:

3.8.2.21.版本3的更改

YAM当前处于版本5中。自版本3和版本4以来,进行了以下更改:

3.9.LaTeX支持

YAM将转换为LaTeX(以及HTML)。注意事项:

4面向开发人员和管理员的信息

目前CoW包括:

系统有工作站和服务器两种模式;前者没有用户管理,后者使用JSecurity。

有API文档等。从这里链接和顶部软件文档树的在这里吗.

4.1.路线图

记录开发路线图、当前活动任务列表和愿望列表在中积压文件.

4.2。检查代码

要从Subversion签出CoW,请首先决定是否要签出副本GWT和Grails HEAD。如果是这样,请执行以下操作:

svn公司https://gatewiki.svn.sourceforge.net/svnroot/gatewiki/trunk网关维基

如果没有,请执行以下操作:

svn公司https://gatewiki.svn.sourceforge.net/svnroot/gatewiki/trunk/cow奶牛

如果执行后者,则需要在中设置属性编译文件指向您自己安装的GWT和Grails。(此外,如果您将CoW放在目录中未命名奶牛你需要换衣服项目名称在里面网络测试/conf/webtest.properties使Canoo测试工作。)

还要注意,存储库中的GWT副本适用于Linux。如果您打开了Windows或Mac,则需要将其替换为合适的版本适用于您的操作系统。

4.3.选择模式

要选择模式(见上文),请使用

工作站包括笔记本电脑,预计将从时间对时间;服务器应始终保持连接(并且始终保持根据相关SVN存储库)。

4.4.创建新的wiki空间

要创建新的wiki空间,请转到“管理”页面并单击wiki区域并选择“新建wiki”。然后您可以:

在前一种情况下,您可以选择任何现有的SVN控制的文件树,并CoW将允许您在该树中创建、共享和更新YAM文件。

请注意,每个wiki区域都有自己的沙盒。有两个方面是特殊的:

其他区域由/g8/page/show/<区域ID>URL。

4.4.1.身份验证设置

在服务器模式下运行时,或执行定时或一次性颠覆时更新(见下文),CoW需要与subversion存储库通信(或存储库)是wiki沙箱的基础。如果存储库是在本地文件系统上(即使用文件:协议)这将工作正常,但如果存储库是远程的(svn:,svn+ssh:,网址:https(https):)它可能需要身份验证。由于相同的身份验证配置文件可以在多个沙箱之间共享(例如多个存储库托管在同一SSH服务器上),配置身份验证需要两步过程。首先必须创建包含用户的身份验证配置文件名称和其他凭据,然后将该配置文件与相关的wiki区域。

要管理已知的身份验证配置文件,请转到Admin主页并遵循页面底部的“身份验证配置文件”链接。每个配置文件可以保存以下任何或所有数据:

请注意,SSH私钥选项优先于用户名和密码-即使设置了密码,也不会将其发送到SSH服务器将改用键。

创建并配置身份验证配置文件后,可以附加创建区域或通过编辑将其发送到相关的wiki区域区域定义(通过管理员上的“创建和编辑Wiki区域”链接第页)。

限制:每个wiki区域都与一个身份验证关联配置文件,以便沙盒包含来自其他存储库的目录(例如。通过svn:外部),必须可以使用访问所有不同的存储库相同的配置文件。在未来版本的CoW公司。

4.4.2.设置wiki重新生成

Wiki页面可以通过链接和包含引用其他Wiki页面。他们是因此相互依赖。更改页面时,依赖项也将更新。这可能会失去同步(可能通过直接编辑磁盘或其他路由)。因此,您可以通过以下方式重新生成wiki依赖项管理界面。这将进一步描述在下面.

4.4.3条。设置wiki更新

wiki是SVN存储库的工作副本,因此可能会过时与存储库相关。您可以从更新wiki工作副本管理界面(在wiki管理页面上)有两种方式:

如果wiki工作副本被锁定(例如,被编辑后的更新所锁定签入),则将跳过更新。如果存在冲突,则更新将失败。如果存储库需要身份验证,则必须已设置如上所述。

由于更新将自动重新生成它们的依赖项。特别是如果是.山药文件已提交到相应的存储库.html格式当CoW更新.山药.

4.5.建造和测试CoW

CoW是用蚂蚁。有关更多文档,请蚂蚁帮助在cow目录中。要运行CoW,请参阅下一节。

当前生成文件

从干净的签出构建CoW,假设grails在同一个签出中目录:

对于贝类动物来说,还有一个脚本垃圾箱/巡航这就是为什么更容易解释测试的大量输出以及存储日志的内容在里面ant-log.txt格式,但请注意,这不会运行功能测试。

4.5.1.关于巡航的更多信息

这个巡航target执行干净的构建并运行Grails单元测试和仅Java测试(针对YAM等)。用于使用Canoo(ant target)的功能测试网络测试)但我们无法让它们与GWT一起工作,所以现在通过提供这个睾丸硒目标(不属于巡航因为在无头模式跨平台中配置Selenium的困难)。这个战争target创建一个WAR文件,可以通过将其放入servlet进行部署容器。

旧的Canoo目标(当前已损坏):

请参见蚂蚁帮助了解更多详细信息。

请注意,ant目标排序中存在一些错误(大多数情况下的解决方法他们要先运行一次ant cruise,然后再执行其他操作):

4.5.2.硒测试

CoW用途的功能测试.Selenium使用各种JavaScript魔法使您能够远程控制一个真正的web浏览器与您的web应用程序对话并验证结果匹配预期(例如,页面包含特定文本,或警告框中显示了特定字符串等)。CoW的硒测试是包含在目录中gatewiki/奶牛/硒在分布中。那里是运行完整测试套件的ant目标,或者您可以在中打开单个测试这个它包含了测试的录制插件Firefox。

要在ant中运行硒测试,请执行以下操作蚂蚁睾丸硒。这将启动服务器处于工作站模式,运行工作站模式测试套件,然后关闭关闭服务器,在服务器模式下重新启动,然后运行服务器模式测试套件。如果本地主机端口8080上已经有一个正在运行的CoW实例,则测试将使用它而不是自己运行,但在这种情况下,您应该只运行与服务器运行模式对应的测试套件(蚂蚁测试硒工作站蚂蚁测试硒服务器),作为测试因为另一种模式可能会失败。

Selenium在真正的web浏览器中运行测试,因此在运行测试之前使用ant,您需要配置Selenium应该使用的浏览器。硒支持多种不同的浏览器尽管目前的CoW测试套件只知道工作可靠在Firefox上5。默认配置(在中指定gatewiki/cow/selenium/test-selenium.属性.默认值)运行Firefox浏览器,并希望找到火狐肉可执行文件路径(Linux)或Firefox安装在默认位置(Mac OS上的/Applications/Firefox.app,C:\程序文件\Mozilla公司火狐浏览器\Windows上的firefox.exe)。如果不是这样,您需要创建测试列宁属性文件覆盖此默认值,包含该行:

browser=*firefox/path/to/your/fifirefox-bin

例如,在Ubuntu上,没有火狐肉,而不是Firefox二进制文件被称为just火狐住在/usr/lib/firefox-{版本},请参阅测试-列宁.属性.ubuntu例如。

注意,由于这个额外的配置步骤,Selenium测试作为的一部分运行蚂蚁巡航.

如果您有CoW数据库中现有的测试工件。尝试删除所有这些和重新运行:

4.5.2.1.Firefox配置文件

Selenium测试使用自定义Firefox配置文件运行,该配置文件允许我们预先配置某些设置,而不更改默认用户配置文件。如果直接访问应用程序,则在gatewiki/奶牛/硒/个人资料/普通然而,如果测试通过通过ratproxy公司用于安全测试中的配置文件gatewiki/奶牛/硒/个人资料/ratproxy将使用。

有关如何生成配置文件和相关证书的完整详细信息可以找到在这里.

4.5.2.2.开发新测试

要开发新的硒测试,最容易使用selenium IDE Firefox插件。使用在相关模式下启动CoW的测试实例蚂蚁运行试验(与-Dgate.cow.mode=服务器如果您正在开发服务器模式test),然后在Firefox中打开selenium IDE并加载相关测试一套,奶牛/硒/{工作站,服务器}-suite.html。您可以添加新测试对于套件,单个测试应作为HTML文件保存在奶牛/硒/测试目录。

什么之中的一个哥特查例如,上传硒测试取决于中存在某些文件dev-user-home/.cowrc。d日目录,其中只有删除此项并在开发中重新运行cow时才会出现创建这些文件后的模式。。。

4.5.3、。升级到新Grails版本

4.5.4.使用YAM测试

测试套件使用了一系列.山药并编译.html格式中的文件奶牛/测试/资源。运行测试后,脚本奶牛/箱子/检查错误将检查故障,以及故障发生的时间通过不正确的翻译,显示实际和正确的(tk)差异输出。

注意:更新到的新版本时yam2html公司测试资源yam-minimal-no-includes.html需要有选择地与合并yam-minimal.html首先更新后者以反映翻译更改,然后:

4.5.5.Grails/Spring/JSecurity和上传功能

目前Grails/Spring和JSecurity插件之间存在问题当上传一个我们希望在未来更新中解决的文件时。

问题是,当在Spring webflow JSecurity中更改将MultipartHttpServletRequest转换为我们无法实现的JsecurityHttpServletRequest然后从获取上传的文件(请参见J安全论坛). 我们实现的解决方法包括重新加载main每次上传操作后都会显示一个页面,这是一种糟糕的用户体验,但很有效。。。

4.6.Subversion版本

(此注释仅与使用SVN树本地副本的用户相关当您阅读此内容时,版本号可能已更改。)

CoW中的Wiki区域是subversion沙盒目录。有很多不同的版本的subversion Java和命令行工具,每个版本都是与控制文件的特定格式关联.svn沙盒中的目录。一般来说,颠覆的后期版本工具可以读取早期版本创建的沙盒,但在这样做时透明地将沙盒“升级”为较新的格式。一旦发生这种情况一个特定的沙盒,该沙盒将不再由早期用户读取版本。

CoW的颠覆支持由SVNKit公司库。在编写本文时,我们使用的是1.2.0版,它与与1.5系列相同的工作副本格式svn公司命令行工具。这个意味着,例如:

如果您打算在工作站模式下使用CoW,则必须使用兼容的,例如。1.5系列命令行客户端。如果您的命令行客户端是版本,例如。1.6您需要升级svnkit公司CoW使用的JAR版本1.3.0(表示1.6协议)。

4.7.配置CoW

CoW中的配置选项在正常情况下处理Grails公司在名为配置.groovy; 覆盖这些选项创建一个名为.cowrc.groovy公司在你家里目录。

例如,以下内容.cowrc.groovy公司会更改标题和徽标,并打开Sventon和Solr第三方网络应用程序:

/**此处为外部CoW配置*/println“加载外部用户配置;在${'pd'.execute().text}中运行”gate.cow.name.short=“cow-开发模式”gate.cow.name.long=“cow-开发模式,一个可控的Wiki”gate.cow.logo=“/g8/page/show/1/doc/larson-small.png”gate.cow.sventon.run=真gate.cow.solr.run=真

有关此示例所做操作的更多详细信息,请参阅现场特定布局剖面).

请注意,因为这个臭虫,CoW使用了一种稍微不标准的方式来配置Grails数据源。收件人修改数据源设置,您应该编辑数据源.groovy配置目录,而不是中的目录颗粒-应用程序/配置文件。希望我们能当我们下一次升级到较新版本时,能够恢复使用正常机制Grails释放。

4.7.1。服务robots.txt

更改默认值/robots.txt(机器人.txt)(什么也不做)集合网关.有线电视.机器人.

4.8.CoW的数据区

CoW将所有用户数据存储在名为.cowrc.d型(于*NIX),即默认情况下在用户的主目录中。

4.8.1.SVN配置目录

这个svnconfig(服务器配置)目录存储与SVN如何在CoW中工作相关的文件。这是一个标准的SVN配置目录(即,它与~/.颠覆)但专为CoW配置。

目前,这种配置确保的一件事是.山药文件具有LF行结束。请注意,这仅适用于添加或导入的文件通过CoW。如果要在CoW之外添加YAM文件,则应该手动确保SVN应用LF行尾。

4.9.部署和运行CoW

4.9.1.启动和停止

运行(或部署)CoW的最简单方法是通过Grails。如果你正在发展然后使用Grails的运行应用程序; 供生产使用竞选战.CoW的生成文件允许您访问这些:ant运行开发target执行Grails运行应用程序并蚂蚁助跑器在CoW WAR上运行Grails生产码头实例。

关机:ctrl-c控制从Ant或Grails运行时将关闭Jetty。中心-c然而,Ant并没有完全关闭从Ant派生的Jetty。对于正确执行所有关机代码,然后运行蚂蚁停机指示。您可以提供Jetty将侦听的可选端口关机信号和要监听的密码键-Djetty.shutdown.port码头-码头关闭键。默认值为中的明文生成文件。

请注意,系统第一次运行时,它将创建一个.cowrc.d型目录(或cowrc公司。d日在Windoze上)包含帮助的主目录中文档、数据库等(第一次完成此操作需要两个因为它设置新wiki区域的方式效率很低。)

或者使用蚂蚁战争并将结果部署到您最喜欢的servlet上容器。有以下几个小缺点:

4.9.2..cowrc.d目录的可移植性

如果要将数据从CoW安装移动到其他位置,您需要做两件事:

4.9.3.Apache 2虚拟主机和CoW代理

本节介绍如何运行多个网站(例如。网址:http://gate.ac.uk/http://gatecloud.net)在使用Apache的单个物理服务器上虚拟主机和代理。每个CoW站点运行在不同的端口上由(单个)Apache服务器代理。该配置在Ubuntu上进行了测试无畏,阿帕奇2.2.9,CoW 0.3。

步骤:

中的虚拟主机定义示例站点-可用目录:

#gate.ac.uk网站<虚拟主机*:80>#从debian安装设置的默认站点复制错误日志/var/log/apache2/error.log日志级别警告CustomLog/var/log/apache2/access.log组合服务器名称gate.ac.uk服务器别名www.gate.ac.ukProxyRequests关闭代理通行证/本地主机:8080/代理密码反向/本地主机:8080/</VirtualHost>

(同样适用于gatecloud.net网站(当然,使用不同的端口号),用于示例。)

验证VH配置:

#APACHE_RUN_USER=www-data APACHERUN_GROUP=www-data/usr/sbin/apache2-S...虚拟主机配置:通配符名称VirtualHosts和_default_服务器:*:80是NameVirtualHost默认服务器127.0.1.1(/etc/apache2/sites-enabled/000-default:1)端口80 namevhost 127.0.1.1(/etc/apache2/sites-enabled/000-default:1)端口80名称host gate.ac.uk(/etc/apache2/sites-enabled/gate.ac.uk:3)端口80 namevhost gatecloud.net(/etc/apache2/sites-enabled/gatecloud.net:3)语法正常

当CoW以这种方式支持Apache代理时,还可以选择将其他wiki区域(除区域1或2外)映射到更“友好”的URL前缀通过使用国防部_重写规则。要利用这个,首先要做sudo a2enmod重写,然后将以下内容添加到虚拟主机配置,之前ProxyPass指令:

重写引擎打开重写规则^/g8/page/show/4(/.*)?$my-wiki$1[右,左]重写规则^/my-wiki(/.*)?$/g8/页面/节目/4$1[PT]

这将使wiki区域4在下面可见/我的威基.第二个重写规则内部重新映射对以下页面的请求/我的威基到相应的以下位置/g8/页/显示/4然而,CoW只看到了通常的情况/g8/页/显示URL,并且不知道该映射,因此它将生成指向的链接/g8/页/显示/4第一条规则意味着当用户的浏览器请求这些URL时,它们将被重定向回到友谊赛/我的威基改为URL。

未决问题:

参考文献:

4.9.4.生产部署和升级

部署GATEWiki时,需要牢记以下要素:

以下一组步骤详细介绍了一个合理的最小部署方法以及生产服务器的升级。它使用G8RS网络(GATE团队的网站供内部使用)为例。这些说明是为在Ubuntu Hardy和Apache 2上运行Grails 1.1.1的GATEWiki 0.9编写。

鲍勃是你叔叔。

4.9.5.部署和运行时依赖项

本说明讨论了两个问题:

  1. 如何为初始部署打包CoW站点?当你想的时候升级网站的软件你是怎么做的?
  2. 如何配置和共享Sventon和Solr等第三方网络应用程序CoW实例之间?

注释:用于部署和升级这里的讨论是前一节.

复杂因素包括:

运行时依赖项:

设计选择:

首先是简单的问题,我们解决问题2。(如何分享Sventon和SolrCoW实例之间),将这些应用程序的所有站点特定配置放在这个考尔德。d日目录,因此文件树可以跨实例共享。(共享servlet本身很棘手,因为它们的配置CoW实例的wiki区域上的依赖项。)

关于第1版,部署和升级部署站点的打包,我们有一个基本解决方案创建自定义-cow-site.sh脚本(另请参见现场特定布局剖面). 这有两种模式

  1. 创建新的部署树,包括所有运行时依赖项
  2. 更新现有树

在这两种模式中,这些参数都是相关的:

版本/日期用作标记SVN树的基础(以便您可以如有必要,稍后返回犯罪现场)并区分现场和服务器部署(服务器软件树和站点树都将包括日期)。

模式1.,创建一个全新的部署树:

然后在远程服务器上测试并部署新树。

模式2.,更新部署的站点:

对新的CoW树进行测试,然后用于替换正在运行的站点。

请注意,使用模式2,可以将多个站点部署到单个主树中,从而跨站点共享大多数运行时依赖项(例如Grails)。

还要注意,当这些依赖关系发生变化时(例如,新版本的Grails或Nutch等)模式1应用于创建新的完整树。(如果上传带宽是一个问题,可以与现有的目标计算机上的部署树。)

4.9.5.1。节省空间

在编写本文时,我们有以下运行时的原始大小上述依赖关系(总计约4.5亿):

$du-sh。。。2.89亿头牛112M大杯1.59亿千瓦时171M螺母2400万sventon

(尽管注意,大多数数据都在SVN中,因此是SVN的两倍否则。没有SVN目录的总数,经过一些开发数据除外,在写入时略低于450M。)

有很多方法可以减少这个总数:

4.10.结构、命名和代码惯例

4.10.1.命名和其他代码约定

GATEWiki使用GATE编码约定。

TODO链接到公约的公开副本。

特别是一件事需要牢记命名控制器时:主目录中控制器的名称空间和顶级wiki目录沙盒冲突(对于网络应用程序目录)。因此,不可能/第页/css公司作为目录主沙盒顶部的名称。新控制器名称(等)应为选择适当(例如CowFooBarController)。

4.10.2.结构

CoW由以下组件(以及许多第三方库)组成:

4.10.2.1.主类和Grails对象

CoW网络应用程序是围绕wiki/内容区域的概念组织的是存储在SVN中的文件树。CoW提供的是

CoW是使用Grails实现的。Grails MVC模型的工作原理如下:

或者,换句话说,Grails web应用程序体系结构有四个主要的组件:

在CoW中,我们有:

例子:

4.11.认证和授权

重要提示:新的GATE wiki安装有默认用户,斯科特。斯科特是一名管理员,他能做任何事。他有传统还有众所周知的密码,老虎。在做其他事情之前,您必须:

别忘了删除斯科特

4.11.1.Grails JSecurity插件

身份验证和授权使用Grails的JSecurity插件.

请注意,插件安装的基本安全模型已经改编:

4.11.2.Grails JCaptcha插件

用户注册试图阻止机器人程序注册,使用Grails的JCaptcha插件:

4.11.3.用户、角色、权限、操作

安全性基于用户、角色和权限。

用户很容易:他们是你、我、你的邻居。正在使用维基。角色是用户组。您决定如何对用户分组取决于你。但最有可能的是,他们将与一些常见的功能要求,如“编辑”、“评审员”。或者可能是“X队”。角色没有他们自己有做任何事情的自动权利。权利必须是分配给一个角色(如果您真的想,也可以分配给单个用户)。权利分别定义为角色。定义后,可以将其分配给任何角色。

权利被定义为“权限”。在默认的JSecurity插件中安装时,权限定义操作和控制器。您可以分配对角色或用户。这些类型的权限对于GATE Wiki来说是不够的wiki可能由单个控制器提供服务,我们可能需要更精细的服务对wiki目录结构的细粒度控制。

因此,我们使用CowPermissions。这些定义包括:

在此模型中包含页面控制器意味着您可以定义访问任意控制器,而不仅仅是wiki页面。这可能有用如果您正在wiki中安装grails插件。

分配的权限有一个控制器和一组命名的操作,以及如果你有这个功能,就可以执行该集合中的任何操作许可。例如,您可以在页面上定义操作集对wiki的读访问或写访问所需的控制器。对于细粒度控制,您可以定义一个集合来包含单个操作。

权限有两种形式:

访问控制过程如下:

请参见线获取权限如何工作的有用描述。

4.11.3.1.目录级授权

对于页面控制器的操作,Gatewiki权限授予授权控件在wiki中的目录级别。特定的权限目录定义为Java语言正则表达式(另请参见这个Java辅导的).

每个权限都有两个目录正则表达式:

要了解这两个模式是如何交互的,以及用户可能具有的多个交互权限,您需要了解目录权限检查。

  1. 为了访问给定的目录或文件,配置了所有权限将检查用户及其所有角色
  2. 如果任何配置的权限授予访问权限,则用户具有访问权限,不考虑任何其他权限
  3. 对于每个配置的权限,都会检查与wiki相关的目录,即位于wiki之后的URL部分名称最多为,但不包括文件名。我们将此称为“目录”。
  4. 对于每个配置的权限,如果以下是正确的:
    • include模式匹配需要访问的整个目录
    • 排除模式与访问的整个目录不匹配是必需的

基本规则是:

最后两点可以在这个真值表中总结

包含图案 包含图案
匹配 无匹配项
排除图案 匹配 DENY(密度)DENY(密度)
排除图案 无匹配项 允许DENY(密度)

一些示例模式

正确的模式很重要,否则你可能会给出意想不到的结果访问。请注意以下有关路径的信息:

图案 注释 作为包含模式的含义 作为排除模式的含义
.*
授予访问所有目录的权限拒绝访问所有目录
这是一个空字符串不允许访问任何目录拒绝访问任何目录
.*foo*

允许访问包含foo的任何目录路径,例如foo/bar/、foobar/、,bar/foo/,bar/foobar/bar/

拒绝访问任何包含foo的目录路径(以上示例)
.*\/foo\/

允许访问叶目录foo的任何目录路径,例如bar/foo/,但不是bar/foobar/或foo/bar/

拒绝访问上述内容
.*\/foo\/*

允许访问任何子目录等于foo的任何目录路径,例如,bar/foo/、bar/foo/bar/,但不是bar/foobar/

拒绝访问上述内容
foo\/*

允许访问顶级目录等于foo的任何目录路径,例如,foo/、foo/bar/,但不是bar/foo/或bar/foobar/

拒绝访问上述内容

一些示例模式使用

脚本示例用例示例包括模式排除模式示例
访问所有目录一般用户
.*
只允许访问wiki中的一个目录关闭站点中外部用户的叶目录
.*\/外部\/\z
拒绝访问wiki中的特定目录大多数用户无法访问叶目录
.*\/特权\/\z

4.11.3.2.通过CowPermission控制访问非页面控制器

SecurityFilter和Jsecurity代码通过“页面”控制器。它们也在引导程序中进行了配置,以提供一些访问权限到其他一些控制器。这些是:

4.11.3.3。用户和密码约束

对用户的约束由UserCommand和PasswordCommand执行,这两个命令在一些地方使用。它们一起定义的字段数超过JsecUser(例如,重复密码,限制为与密码相同),但可以绑定到JsecUser。请注意,UserCommand无法强制唯一的名称约束,由JsecUser完成

4.11.3.4.工作站和服务器模式下的安全性

4.11.4.预定义的安全对象

以上给出了安全工作原理的抽象视图。在默认的GATE wiki中安装时,将有几个预定义的安全对象,您可以用于启动并运行安装。

类型 对象 描述
角色管理员

此角色具有单个预定义权限,允许其访问wiki*操作集名为*,其中包含所有操作,并指向控制器*换句话说,这个角色的成员可以做任何事情。默认只有一个初始成员scott(见下文),您可以应删除。

角色违约

所有新注册者都会自动成为此角色的成员。此角色没有预定义的权限。因此,默认情况下,会提供新的注册者什么也得不到。但您可以为此角色分配权限,以便注册者可以访问某些内容。

角色匿名的

这个角色与其他角色的待遇不同。默认引导权限将允许任何人访问此角色所允许的内容,无论他们是该角色的成员还是已登录。实际上,所有已登录或未登录的用户都是此的成员角色。默认情况下,此角色具有允许只读的权限访问帮助wiki,以及jcaptcha、注册、,和用户控制器,所有这些都需要注册等。

角色帮助阅读此角色只有一个权限,可以对帮助wiki进行读取访问。
角色帮助读写此角色只有一个权限,可以对帮助wiki进行读写访问。
角色主读数此角色只有一个权限,可以对主wiki进行读取访问。
角色主读写此角色只有一个权限,可以对主wiki进行读写访问。
角色维基N个阅读

默认情况下,为任何新wiki创建此角色N个.它有一个单间权限,授予对wiki的读取权限N个.

角色维基N个读写

默认情况下,为任何新wiki创建此角色N个.它有一个单间权限,授予对wiki的读写访问权限N个.

用户斯科特

管理员组的唯一默认成员,通常密码。您应该创建一个新的管理员用户,以该新用户的身份登录,然后删除斯科特。

操作集阅读

为授予对维基。构造新权限时使用。

操作集读取和写入

一组命名的所有操作,用于对维基。构造新权限时使用。

操作集* 所有操作的命名集。构造新权限时使用。
控制器页面,jcpatcha,注册,用户,* 默认角色使用的控制器。

注意事项:

4.11.5.标记库

除了Jsecurity定义的标签之外(笔记不要使用jsec:prinicipal,见下文),SecurityTagLib中提供了以下内容:

有关更完整的文档,请参阅taglib。

4.11.6.Jsecurity和GATE Wiki之间的代码依赖性

很少!当然,有很多特定于安全性的页面及其管理。但要将这些与核心维基。

4.11.7。已知漏洞并避免它们

4.12.特定于站点和Wiki的布局和导航

CoW的外观是极简主义美学的杰作,就像这在这个奢侈浪费、技术狂热的时代是罕见的和全身蓬松。每个使用CoW的人都不可避免地希望保留它漂亮的外表完全没有改变。然而,如果国际资本主义阴谋迫使你大喊大叫不同的是,CoW提供了几种实现特定站点(和wiki)的方法特定区域)布局和配置,从简单的事情,如更改标题以使用Grails(基于Sitemesh的)布局进行彻底反思。如果你想让你的CoW像鸭子一样嘎嘎作响,或者像臭鼬一样臭气熏天在猪的天堂。

CoW提供导航功能(指向按菜单组织的网站部分的链接集)可以根据每个区域或每个目录进行定制,再加上布局(CSS样式、页面结构等),可以根据不同的位置或不同的区域进行定制基础。

4.12.1.导航

适用于整个站点或整个wiki区域的导航可能是最好放在Grails布局插件中-请参阅更换主要布局如下所示。在其他情况下,例如不同于wiki区域的不同部分,CoW允许您在中创建链接列表普通wiki页面(遵循可配置的命名约定)并将使用创建导航菜单。

对于不耐烦的人:创建一个名为左栏.html包含的列表链接,例如。

(不要在文件中放置标题。)然后该目录下的所有页面都将有一个包含这些项目的左导航菜单。

更多详细信息:

向目录树添加导航涉及将YAM文件添加到树,其中包含您要访问的各种屏幕区域的链接要包含它们(例如,顶栏、左栏、右栏、页脚)。这些文件必须以主布局的相应DIV元素命名(in默认CoW布局,称为页眉、左栏、右栏和页脚;在运行自定义布局的CoW中,它们可能具有不同的名称)。(注意布局编写器:被自定义导航替换的DIV必须位于布局中BODY元素的顶层。)因为导航文件如果导航下有任何子目录,则由子树继承文件中的链接必须是绝对的(即以“/”开头)。

这种类型的导航在渲染时处理,这样我们就不会丢失能够在CoW之外使用YAM文件。所以在CoW的地方读取它所采用的YAM派生HTML文件的主体a)当前wiki区域树和b)当前目录(隐式),然后是在树中查找配置中指定的所有布局(低于导航.files). 出现的每个都将添加到页面模型中在里面页面控制器.显示,这些成为相关部分的内容主布局(例如页眉、左栏、页脚等)。

4.12.2.替换主页布局

如果要替换站点(或特定wiki)的整个外观区域),然后需要创建Grails插件并提供Sitemesh布局,如下所示。有一个插件示例,它设置CoW以使用University of谢菲尔德风格gatewiki/site插件/nlp(以及各种其他那里)。

分步执行:

另一个示例:创建一个“g8rs”插件并将整个树打包部署:

光盘gatewiki/site-pluginsGRAILS_HOME=/圣杯/grails/bin/grails创建插件g8rs光盘g8rsGRAILS_HOME=..//圣杯..//grails/bin/grails创建控制器\gate.cow。来宾版式…现在编辑grails-app/views/layouts/cowguest.gsp。。。GRAILS_HOME=..//圣杯..//grails/bin/grails包插件cow/bin/create-custom-cow-site.sh-n g8rs-p`pwd`/site-plugins/g8rs

(另请参见奶牛/箱子/站点plugin.sh示例脚本。)

4.12.3.更改标题或徽标

如果你想更换一些小东西,比如网站名称(放在页面标题中)或主徽标,然后您只需要在中提供外部配置文件网关.cow.user.home(默认值为如果未显式设置,则设置为操作系统的HOME目录)。有一个中的示例gatewiki/cow/dev-user-home/.cowrc.groovy.

更改标题:

gate.cow.name.short=“cow-开发模式”gate.cow.name.long=“cow-开发模式,可控Wiki”

更改主徽标:

gate.cow.default.logo=“/g8/page/show/2/my-logo.png”

(在这种情况下,PNG文件需要上传到Wiki Area 2。)

请注意,徽标需要位于匿名者可以阅读的位置用户,否则它将不会显示在登录页面上。你也可以这样做通过在匿名阅读维基中放置徽标,或通过提供匿名用户对另一个wiki中单个文件夹的读取权限。

4.12.4.处理非本机HTML页面

非主动HTML页面是那些不是从YAM标记生成的页面,即。实际上并不是由CoW作为wiki页面进行管理。CoW将为任何旧的HTML页面提供服务用户碰巧上传到沙箱中(或由任何第三方SVN客户端)。如果HTML来自可信源,这是可以的,但是例如,当它可能包含任意javascript时就不太好了。没有这个问题的简单答案,因此CoW提供了几种方法来控制非本机HTML的服务,但默认情况下它们是关闭的。

有两种选择。

选项1允许用户为特定目录指定任何非本机HTML页面将被完整地原始提供(但请参见下文关于在里面安全!)。

注意显而易见的安全孔:如果任何用户可以上传任何HTML并获取它由CoW生吃,所有形式的恶意攻击都有可能发生。不允许用户除非你对他们的意图很有信心(和基本的技术技能,例如避免病毒等)。如果你一切都好这样,方法是:

选项2是指定(作为管理员通过管理页面)一组应用于非本地HTML页面的路径模式,并再次导致它们生吃。此选项的实现方式与目录级授权。管理员,同时设置wiki,可以指定允许或不允许哪些目录用于服务非本机HTML文件。

每个wiki区域都有两个用于此目的的正则表达式:

了解这两种模式如何交互以及目录的详细信息权限检查请参阅目录级授权第节。如果目录匹配include模式并且不排除,HTML页面是原始提供的;否则许可被拒绝向用户显示消息。

如果您随后将原始HTML所在的目录设为read只有这样你才安全。

管理员可以使用这两个选项。给用户一个查看非本机HTML文件的权限,如果非本机文件所属的权限由两个选项中的至少一个授予。

对iframe还是不对iframe?
通常,结果页面包含拉入原始HTML页面的iframe。这对Javadocs这样的东西很好等抄送。,但在某些情况下,您可能只想提供页面正文而不是(例如GATE用户指南)。如果文件调用.cow-no-iframe型出现在包含HTML页面的目录中,那么iframe将是略。

4.13.引用和再生

问题是,在.yam上执行创建/重命名/删除/修改操作应该通过链接或包含它的任何文件级联。相关数据是指文件“linksTo”和“includes”。需要再生:

需要在单个依赖关系图中为每个Wiki区域。这是在Dependencies类中编码的。

如果我们能保证所有必要的再生和依赖性维护只要生成完成,就可以假定该图为一致。在工作站模式下,由于来自其他工具,但在最坏的情况下,我们可以定期或按要求重新生成所有输出文件以确保一致性。

引用事件

事件来源

可能的事件处理程序(使用和维护依赖关系图)

当前的设计是使用YamFile.generate。

4.13.1.序列化

依赖项被序列化到conf.gate.cow.dbs目录,每个目录一个文件维基。它们在关闭时序列化,并在正常运行期间定期序列化。定期序列化由DependenciesJob执行(每分钟一次)。他们是根据需要延迟反序列化。

4.13.2.再生

单个wiki的依赖关系在四种情况下重新生成:

4.13.3.SVN运行速度状态

如上所述,可以通过多种方式更改由wiki管理的YAM文件:

在这些情况下,我们都需要重新生成依赖于变化(例如.html格式比它更古老.山药; 一个YAM文件,其中指不再存在的wiki页面;等)。

有许多确定哪些需要再生的策略:

  1. 直接检查文件系统的低优先级进程
  2. 从SVN存储库接收通知的侦听器
  3. 运行的进程svn标准获取已更改文件的报告

对于选项3.,此表中的统计数据很有趣。他们给出了一个指示执行svn标准在销售树上(即100000多个文件中包含超过5Gb的数据。

svn标准在销售树上(因寒冷) svn标准-u销售中(缓存文件系统)
第一次运行第十次跑步

实际0m58.839s
用户0m5.236s
系统0m3.576s

实际0m2.380
用户0m1.604s
系统0m0.504s

第一次运行第十次跑步

实际0m33.331s
用户0m3.772s
系统0m0.852s

实际0m31.082s
用户0m3.280s
系统0m0.972s

本地状态检查(不去网络检查存储库变化)从冷开始需要大约一分钟,但随后(当操作系统有机会缓存文件系统的某些部分)只需要几次秒。网络检查(svn标准-u)保持在30左右秒。

(测试在2GHz Pentium M上进行,1Gb RAM运行Ubuntu Dapper宽带连接。)

4.14.Sourceforge注释

4.15条。Grails MVC备注

4.16.IntelliJ注释

4.17.搜索基础架构

CoW使用Nutch和Solr的组合来索引和搜索wiki地区。

螺母擅长爬行,有几个可用于从不同类型的文件。索尔另一方面,是一个企业搜索服务器具有非常好的搜索API。唯一的缺点解决的办法是,它要求所有文档都是XML格式的索引。幸运的是,Nutch有一个插件可以将爬网数据转换为适当的XML格式。两者的结合提供了一个完整的搜索Nutch负责爬行内部网/网站的系统,将文档转换为适当的XML文档并上传内容Solr负责维护多个指数为用户在这些索引中进行搜索提供了强大的搜索API。

4.17.1.安装

4.17.1.1.目录结构

4.17.1.2.启用Solr

默认情况下,Solr处于禁用状态。告诉CoW运行Solr(通过运行时Grails)设置门。配置中将CoW.solr.run设置为true。还要确保大门。Cow.trirdparty设置为true。

4.17.2.从CoW索引wikis/单个文件

4.17.2.1.索引单个Wiki区域

4.17.2.2.为单个文件编制索引

无论何时创建、上传或编辑文件,都会排队等待索引。一个石英的工作仅用于索引目的。它每运行一次五分钟,并为在队列中找到的所有文档编制索引。如果一份文件已编制索引,则会删除并重新编制索引。

4.17.3.测试

现在有一个单独的测试套件(硒/solr-suite.html)用于测试溶胶索引和搜索功能。请注意,运行硒测试不测试solr功能。相反,请使用试验硒溶胶ant目标调用solr测试。

4.17.4.调试

如果您的查询没有结果,首先要确保的是已经遵循了所有正确的过程来索引各自的wiki区域。拜托请参阅编制索引部分了解更多信息。如果你确定您遵循了索引下提到的所有步骤部分,但没有结果,请遵循以下说明要调试:

4.18.SVN浏览

GATEWiki层位于SVN之上,以利用SVN的成熟和对协作并发编辑、版本控制、,它还允许我们从所有第三方工具中获利支持SVN,特别是提供wiki页面的浏览(以及其他内容)及其历史。

我们研究了许多提供此功能的工具,并对其进行了评估斯文顿、OpenGrok和ViewCVS。所有人都有自己的优势和劣势符合我们的目的,但Sventon最适合(Java,开源,不特定于浏览代码存储库)。

4.18.1.关于CoW中Sventon的注释

CoW使用Sventon的未打包版本svn.war公司带有附加配置文件,其中:

CoW在运行时配置Sventon以能够浏览subversion与配置的wiki区域相对应的存储库。身份验证设置从CoW传播到Sventon,因此如果远程存储库需要身份验证Sventon将使用与相同的设置进行身份验证CoW将使用访问相应的wiki。

要升级到Sventon的新版本,请将其解压缩到gatewiki/sventon公司,更改网络应用程序链接指向它,然后按照README文件.

告诉CoW运行Sventon(通过Grails运行时)集合网关.cow.sventon.run在配置中设置为true。

4.19.使用插件扩展YAM

YAM有一个插件机制,它涉及编写一个Java(或Groovy)类实施YamPlugin接口。删除该类(必须在包中gate.yam.plugins公司到承载YAM转换器的应用程序的类路径中(例如。GATEWiki),然后您可以按照YAM文档中的描述进行调用。

参见示例。这个Twitter插件的实现激发灵感。

这有助于将HTML片段放入YAM中页面(例如,谷歌网站搜索、推特更新等)。(我们删除了旧版本的YAM必须直接执行此操作的能力,因为安全隐患、XSS攻击等。)

脚注

  1. SVN:颠覆版本控制系统。
  2. 在工作站中时除外模式。
  3. 链接文本可以包含“内联”标记,例如%形象,%引用或*大胆的*/_斜体_,但不是块标记,如表
  4. 这是一个脚注。
  5. 文件上传测试需要以编程方式填写文件上传表单字段,只有在特殊的“提升特权”模式,使用*火狐发射器