FAQ 文档

This commit is contained in:
Liang Ding 2014-09-13 16:50:18 +08:00
parent ec493adffa
commit 8e6583648b
8 changed files with 85 additions and 45 deletions

View File

@ -15,8 +15,9 @@ import (
)
type User struct {
Name string
Password string
Name string
Password string
Workspace string // 指定了该用户的 GOPATH 路径
}
type conf struct {
@ -30,24 +31,27 @@ type conf struct {
StaticPath string
MaxProcs int
RuntimeMode string
Workspace string
UserWorkspaces string
Pwd string
Users []User
}
var Wide conf
var rawWide conf
func (this *conf) GetWorkspace() string {
return filepath.FromSlash(this.Workspace)
}
// 获取 username 指定的用户的工作空间路径.
func (this *conf) GetUserWorkspace(username string) string {
return filepath.FromSlash(this.UserWorkspaces) + string(os.PathSeparator) + username
for _, user := range Wide.Users {
if user.Name == username {
ret := strings.Replace(user.Workspace, "{Pwd}", Wide.Pwd, 1)
return filepath.FromSlash(ret)
}
}
return ""
}
func Save() bool {
// 可变部分
// 只有 Users 是可以通过界面修改的,其他属性只能手工维护 wide.json 配置文件
rawWide.Users = Wide.Users
// 原始配置文件内容
@ -99,10 +103,8 @@ func Load() {
file, _ := exec.LookPath(os.Args[0])
pwd, _ := filepath.Abs(file)
pwd = pwd[:strings.LastIndex(pwd, string(os.PathSeparator))]
Wide.Pwd = pwd
glog.V(3).Infof("pwd [%s]", pwd)
Wide.Workspace = strings.Replace(Wide.Workspace, "{pwd}", pwd, 1)
Wide.UserWorkspaces = strings.Replace(Wide.UserWorkspaces, "{pwd}", pwd, 1)
glog.V(3).Info("Conf: \n" + string(bytes))
}

View File

@ -9,12 +9,12 @@
"StaticPath": "",
"MaxProcs": 4,
"RuntimeMode": "dev",
"Workspace": "{pwd}/data/workspace",
"UserWorkspaces": "{pwd}/data/user_workspaces",
"Pwd": "{pwd}",
"Users": [
{
"Name": "admin",
"Password": "admin"
"Password": "admin",
"Workspace": "{Pwd}/data/user_workspaces/admin"
}
]
}

51
doc/zh_CN/faq.html Normal file
View File

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wide - 常见问题与解答</title>
</head>
<body>
<h1>常见问题与解答</h1>
<ul>
<li><b>默认用户是?</b></li>
<p>默认用户是 admin 用户。用户名admin密码admin。</p>
<li><b>什么是工作空间?</b></li>
<p>
工作空间是当前用户的 $GOPATH 路径指定的目录,一个用户只能有一个工作空间。
例如 admin 用户的工作空间默认路径是 {wide}/data/user_workspaces/admin/,可以在 wide.json 中配置。
</p>
<li><b>wide.json 是什么?</b></li>
<p>
wide.json 是 Wide 的配置文件,路径是 {wide}/conf/wide.json。Wide 的所有配置(例如端口、工作空间、用户帐号、用户选项等)都是保存在这个文件中的。
</p>
<p>
如果 Wide 是个人使用,那么默认的配置应该可以很好的工作,不需要修改任何地方。
</p>
<li><b>如何才能使用已有 $GOPATH比如我的 $GOPATH 是 D:\\GoGoGo我要如何才能使用这个目录作为 admin 用户的工作空间?</b></li>
<p>
修改 wide.json 中 admin 用户的 Workspace将其从默认的 "{pwd}/data/user_workspaces/admin" 改为 "D:\\GoGoGo"。
</p>
<p>
$GOPATH 是可以通过路径分隔符Linux 下是 :Windows 下是 ;)配置多个路径的,但我们不建议您这样配置,因为多个多个目录会造成构建/代码补全等功能的性能下降。
</p>
<li><b>文件树里的 Go API 目录是什么?</b></li>
<p>
该目录是读取 $GOROOT/src/pkg 生成的,方便用户查看 Go API 源代码。
在该目录下是不允许新建、编辑、删除文件的。
</p>
<li><b>如何配置多用户?</b></li>
<p>
修改 wide.json 中的 Users 数组,按照默认用户的格式(用户名、密码等)添加。
</p>
</ul>
</body>
</html>

View File

@ -10,7 +10,7 @@
<p>
Wide 是一个基于 Web 的 golang 开源 IDE。
</p>
<h2><a href="motivation.html">动机</a></h2>
<h2>特性</h2>
@ -30,8 +30,10 @@
<h2>使用指南</h2>
<ul>
<li><a href="multiplayer.html">多用户</a></li>
<li><a href="editor.html">编辑器</a></li>
<li><a href="editor.html">编辑器</a></li>
<li><a href="keyboard_shortcuts.html">键盘快捷键</a></li>
</ul>
</ul>
<h2><a href="faq.html">FAQ</a></h2>
</body>
</html>

View File

@ -13,20 +13,9 @@
<h2>工作空间</h2>
<p>
一个工作空间由下面几个部分组成:
Wide 的工作空间就是 Go 中的 <a href="https://golang.org/doc/code.html#Workspaces" target="_blank">workspaces</a>,每个用户的工作空间路径可在 wide.json 中进行配置。
</p>
<ul>
<li>源代码仓库data/user_workspaces/{user}/src</li>
<li>GOPATHdata/user_workspaces/{user}</li>
</ul>
<p>
这和 golang 本身 <a href="https://golang.org/doc/code.html#Workspaces" target="_blank">workspaces</a> 的设计保持一致:每个用户的 GOPATH 指定了其工作空间的路径。
</p>
<h2>版本控制</h2>
<p>
使用 git 作为源码版本控制系统data/workspace/src 是主库,每个用户的源码仓库都克隆自主库。
</p>
<h2>运行时</h2>
<p>
用户在运行程序时进程是跑在服务器上的,所以多用户同时运行程序时最常见的问题就是资源冲突(比如网络端口),目前这个问题只能靠用户自行规避。

View File

@ -114,12 +114,7 @@ func AutocompleteHandler(w http.ResponseWriter, r *http.Request) {
userLib := userWorkspace + string(os.PathSeparator) + "pkg" + string(os.PathSeparator) +
runtime.GOOS + "_" + runtime.GOARCH
masterWorkspace := conf.Wide.Workspace
//glog.Infof("Master workspace [%s]", masterWorkspace)
masterLib := masterWorkspace + string(os.PathSeparator) + "pkg" + string(os.PathSeparator) +
runtime.GOOS + "_" + runtime.GOARCH
libPath := userLib + string(os.PathListSeparator) + masterLib
libPath := userLib
//glog.Infof("gocode set lib-path %s", libPath)
// FIXME: 使用 gocode set lib-path 在多工作空间环境下肯定是有问题的,需要考虑其他实现方式

View File

@ -21,7 +21,9 @@ import (
// Wide 中唯一一个 init 函数.
func init() {
flag.Set("logtostderr", "true")
flag.Set("v", "1")
flag.Set("v", "5")
conf.Load()
flag.Parse()
}
@ -61,8 +63,6 @@ func indexHandler(w http.ResponseWriter, r *http.Request) {
}
func main() {
conf.Load()
runtime.GOMAXPROCS(conf.Wide.MaxProcs)
defer glog.Flush()

View File

@ -51,11 +51,11 @@ func InitGitRepos(w http.ResponseWriter, r *http.Request) {
session, _ := Session.Get(r, "wide-session")
username := session.Values["username"].(string)
userRepos := conf.Wide.UserWorkspaces + string(os.PathSeparator) + username + string(os.PathSeparator) + "src"
userRepos := conf.Wide.GetUserWorkspace(username) + string(os.PathSeparator) + "src"
glog.Info(userRepos)
// TODO: git clone
glog.Infof("Git Cloned from [%s] to [%s]", conf.Wide.Workspace+string(os.PathSeparator)+"src", userRepos)
}
func addUser(username, password string) string {
@ -69,7 +69,8 @@ func addUser(username, password string) string {
}
}
newUser := conf.User{Name: username, Password: password}
// FIXME: 新建用户时保存工作空间
newUser := conf.User{Name: username, Password: password, Workspace: ""}
conf.Wide.Users = append(conf.Wide.Users, newUser)
if !conf.Save() {