## 概述
`app.conf` 是Revel程序的配置文件,它使用 [goconfig](https://github.com/revel/config) 语法,类似微软的 INI 文件。
下面是个例子:
~~~
app.name=chat
app.secret=pJLzyoiDe17L36mytqC912j81PfTiolHm1veQK6Grn1En3YFdB5lvEHVTwFEaWvj
http.addr=
http.port=9000
[dev]
results.pretty=true
watch=true
log.trace.output = off
log.info.output = stderr
log.warn.output = stderr
log.error.output = stderr
[prod]
results.pretty=false
watch=false
log.trace.output = off
log.info.output = off
log.warn.output = %(app.name)s.log
log.error.output = %(app.name)s.log
~~~
每个段是一种 **运行模式**。最上面的 key (不在任何段内)对所有的运行模式有效。这使得默认值在所有模式中适用,并且根据需要被重写。`[prod]` 段仅用于 `生产` 模式。
新建的Revel程序中默认定义了 **dev** 和 **prod** 模式, 你也可以自定义你需要的段。 程序启动时,根据 ([命令行工具](http://gorevel.cn/docs/manual/tool.html))“revel run” 提供的参数来选择运行模式。
## 自定义属性
开发者可以自定义key,并通过 [`revel.Config` 变量](http://gorevel.cn/docs/docs/godoc/revel.html#variables) 访问它们。这里公开了一些简单的 [api](http://gorevel.cn/docs/docs/godoc/config.html)。
## 内建属性
### 应用程序设置
#### app.name
应用程序名称,用于控制台输出和开发web页。
例如:
~~~
app.name = Booking example application
~~~
默认值: 无值
* * *
#### app.secret
密钥用于密码操作 ([`revel.Sign`](http://gorevel.cn/docs/docs/godoc/util.html#Sign))。Revel 在内部使用它签署session cookies。设置为空将禁用签名。
使用 `revel new`新建项目时,它被设置为一个随机的字符串。
例如:
~~~
app.secret = pJLzyoiDe17L36mytqC912j81PfTiolHm1veQK6Grn1En3YFdB5lvEHVTwFEaWvj
~~~
默认值: 无值
### HTTP settings
#### http.port
监听端口
例如:
~~~
http.port = 9000
~~~
* * *
#### http.addr
监听ip地址
Linux中, 空字符串代表通配符 – Windows中, 空字符串被转换为 `"localhost"`
默认值: ””
* * *
#### harness.port
Specifies the port for the application to listen on, when run by the harness. For example, when the harness is running, it will listen on `http.port`, run the application on `harness.port`, and reverse-proxy requests. Without the harness, the application listens on `http.port` directly.
默认情况下,会选择一个随机的空闲端口。这仅仅是必要的,由该程序限制插座访问的环境中运行时设置。By default, a random free port will be chosen. This is only necessary to set when running in an environment that restricts socket access by the program.
Default: 0
* * *
#### http.ssl
如果为真, Revel Web服务器将自行配置为接受SSL连接。这需要一个 X509 证书和一个 key 文件。
默认值: false
#### http.sslcert
指定 X509 证书文件的路径
默认值: ””
#### http.sslkey
指定 X509 证书 key的路径
默认值: ””
### 响应结果
#### results.chunked
确定模板渲染时是否使用 [分块编码](http://gorevel.cn/docs/manual/en.wikipedia.org/wiki/Chunked_transfer_encoding)。分块编码可以减少发送到客户端的第一个字节的时间(在整个模板已经完全呈现数据之前)。
默认值: false
* * *
#### results.pretty
配置 [`RenderXml`](http://gorevel.cn/docs/docs/godoc/controller.html#RenderXml) 和 [`RenderJson`](http://gorevel.cn/docs/docs/godoc/controller.html#RenderJson) 生成缩进格式的 XML/JSON. 例如:
~~~
results.pretty = true
~~~
默认值: false
### 国际化 (i18n)
#### i18n.default_language
为消息翻译指定默认的语言,如果客户端请求的语言环境未确认。如果不指定,则返回一个虚拟的信息。
例如:
~~~
i18n.default_language = en
~~~
默认值: ””
* * *
#### i18n.cookie
指定存储用户语言环境的cookie名称
默认值: “%(cookie.prefix)_LANG” (参考 cookie.prefix)
### 监视
Revel 监视项目改动,并支持几种类型文件的热重载。启用监视:
~~~
watch = true
~~~
如果为假, 禁用监视, 并忽略其他相关的监视配置 `watch.*` (适用于生产环境)
默认值: true
* * *
#### watch.templates
如果为真, Revel 监视模板变化,必要时重新加载他们。
默认值: true
* * *
#### watch.routes
如果为真, Revel 监视 `routes` 文件的变化,必要时重新加载。
默认值: true
* * *
#### watch.code
如果为真, Revel 监视Go代码改动,必要时重新编译代码(作为反向代理运行)。
`app/` 目录(包括子目录)下的代码都被监视。
默认值: true
### Cookies
Revel 组件默认使用下面的 cookies:
* REVEL_SESSION
* REVEL_LANG
* REVEL_FLASH
* REVEL_ERRORS
#### cookie.prefix
Revel 使用这个属性作为 Revel-produced cookies前缀。这样可以在同一台主机上运行多个REVEL应用程序。
例如,
~~~
cookie.prefix = MY
~~~
则对应的 cookie 名称如下:
* MY_SESSION
* MY_LANG
* MY_FLASH
* MY_ERRORS
默认值: “REVEL”
### Session
#### session.expires
Revel 使用这个属性设置session cookie的有效期。 Revel 使用 [ParseDuration](http://golang.org/pkg/time/#ParseDuration) 解析字符串,默认值是 30 天。也可以设置为会话结束时过期。 请注意,客户端的行为依赖于浏览器的设置,所以结果并不总是保证。
### 模板
#### template.delimiters
指定模板左右分隔符
必须这样指定分隔符 “左分隔符 右分隔符”
默认值: “{{ }}”
### 格式化
#### format.date
指定默认的日期格式,Revel在两个地方使用它:
* 绑定日期参数到 `time.Time` (参考 [binding](http://gorevel.cn/docs/manual/binding.html))
* 在模板中使用 `date` 模板函数输出日期 (参考 [模板函数](http://gorevel.cn/docs/manual/templates.html))
默认值: “2006-01-02”
* * *
#### format.datetime
指定默认的日期时间格式,Revel在两个地方使用它:
* 绑定日期参数到 `time.Time` (参考 [binding](http://gorevel.cn/docs/manual/binding.html))
* 在模板中使用 `datetime` 模板函数输出日期 (参考 [模板函数](http://gorevel.cn/docs/manual/templates.html))
默认值: “2006-01-02 15:04”
### 数据库
#### db.import
指定DB模块的 database/sql 驱动程序导入路径。
默认值: ””
* * *
#### db.driver
指定 database/sql 驱动程序名称 (在[`sql.Open`](http://golang.org/pkg/database/sql/#Open)中使用).
默认值: ””
* * *
#### db.spec
指定 database/sql 数据源名称 (在 [`sql.Open`](http://golang.org/pkg/database/sql/#Open)中使用).
默认值: ””
### 构建
#### build.tags
[Build tags](http://golang.org/cmd/go/#Compile_packages_and_dependencies) 构建程序的时候使用。
默认值: ””
### 日志
TODO
### 缓存
[cache](http://gorevel.cn/docs/manual/cache.html) 模块是一个简单的堆或分布式缓存接口
#### cache.expires
设置缓存过期时间。在程序中调用者使用常量`cache.DEFAULT`获取。
它是接受一个[`time.ParseDuration`](http://golang.org/pkg/time/#ParseDuration) 字符串。
(目前还不能指定默认值为 `FOREVER`)
默认值: “1h” (1 小时)
* * *
#### cache.memcached
如果为真, 缓存模块使用 [memcached](http://memcached.org/) 来代替内存缓存。
默认值: false
* * *
#### cache.hosts
一个逗号分隔的 memcached 主机列表。缓存条目使用确定的主机名缓存key自动分片到可用的主机中。主机可能会多次列出,以增加共享的缓存空间。
默认值: ””
### 计划任务
[计划任务](http://gorevel.cn/docs/manual/jobs.html) 模块允许你运行计划任务或者临时任务
#### 时间表
时间表可以通过key来配置。
~~~
cron.schedulename = @hourly
~~~
时间表的计划时间可以在执行器中提交任务时使用。例如:
~~~
jobs.Schedule("cron.schedulename", job)
~~~
* * *
#### jobs.pool
允许同时允许的任务数量。例如:
~~~
jobs.pool = 4
~~~
如果为 0, 则没有数量限制
默认值: 10
* * *
#### jobs.selfconcurrent
如果为真, 允许一个任务运行,即使是该任务的实例仍在进行中。
默认值: false
### 模块
[模块](http://gorevel.cn/docs/manual/modules.html) 通过指定导入路径将模块添加到应用程序中。例如:
~~~
module.testrunner = github.com/revel/revel/modules/testrunner
~~~
## 开发计划
* 允许使用命令行参数配置值或以其他方式在命令行中指定值。