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

View File

@ -9,12 +9,12 @@
"StaticPath": "", "StaticPath": "",
"MaxProcs": 4, "MaxProcs": 4,
"RuntimeMode": "dev", "RuntimeMode": "dev",
"Workspace": "{pwd}/data/workspace", "Pwd": "{pwd}",
"UserWorkspaces": "{pwd}/data/user_workspaces",
"Users": [ "Users": [
{ {
"Name": "admin", "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

@ -30,8 +30,10 @@
<h2>使用指南</h2> <h2>使用指南</h2>
<ul> <ul>
<li><a href="multiplayer.html">多用户</a></li> <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> <li><a href="keyboard_shortcuts.html">键盘快捷键</a></li>
</ul> </ul>
<h2><a href="faq.html">FAQ</a></h2>
</body> </body>
</html> </html>

View File

@ -13,18 +13,7 @@
<h2>工作空间</h2> <h2>工作空间</h2>
<p> <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> </p>
<h2>运行时</h2> <h2>运行时</h2>

View File

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

View File

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

View File

@ -51,11 +51,11 @@ func InitGitRepos(w http.ResponseWriter, r *http.Request) {
session, _ := Session.Get(r, "wide-session") session, _ := Session.Get(r, "wide-session")
username := session.Values["username"].(string) 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 // 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 { 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) conf.Wide.Users = append(conf.Wide.Users, newUser)
if !conf.Save() { if !conf.Save() {