Relative paths in revel framework

牧云@^-^@ 提交于 2019-12-24 17:43:06

问题


How can import a file realtive to the revel basefolder in revel framework. Currently I do the following to get hold of some config values.

file, err := ioutil.ReadFile("conf/config.conf")
...

This results in my server only working if i stand in the app directory when starting revel with

revel run myapp

Is there a way to access the base folder?


回答1:


There are exported global variables in the revel package, you can use any of these:

var (
    // App details
    AppName    string // e.g. "sample"
    BasePath   string // e.g. "/Users/revel/gocode/src/corp/sample"
    AppPath    string // e.g. "/Users/revel/gocode/src/corp/sample/app"
    ViewsPath  string // e.g. "/Users/revel/gocode/src/corp/sample/app/views"
    ImportPath string // e.g. "corp/sample"
    SourcePath string // e.g. "/Users/revel/gocode/src"

    // Revel installation details
    RevelPath string // e.g. "/Users/revel/gocode/src/revel"

    // Where to look for templates and configuration.
    // Ordered by priority.  (Earlier paths take precedence over later paths.)
    CodePaths     []string
    ConfPaths     []string
    TemplatePaths []string
)

If it is empty for you, that is most likely because you started your app from the base folder.

Note that these paths are set by the Init(mode, importPath, srcPath string) function. It's documentation states:

srcPath - the path to the source directory, containing Revel and the app.
  If not specified (""), then a functioning Go installation is required.

Also check out: how to reference a relative file from code and tests




回答2:


I use this method: In conf/app.conf add a line with the configuration path of this way:

projectname.path = "/foldersnames/"

and in the controller Write a method like this:

func info(field string) string {                                                                                                                                                                               
  config, err := revel.LoadConfig("app.conf")                                                                                                                                                                  
  if err != nil || config == nil {                                                                                                                                                                             
    log.Fatalln("Failed to load configuration file", err)                                                                                                                                                      
   }                                                                                                                                                                                                            
  return config.StringDefault(field, "empty")                                                                                                                                                                  
} 

You can build a helper with this code and take configurations variables from all applications.

You must call of this way:

info("projectname.path")


来源:https://stackoverflow.com/questions/31265072/relative-paths-in-revel-framework

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!