Skip to content

Commit 42f9bae

Browse files
committed
云引擎 webHosting 文档修改
* 时区问题只在 node 文档介绍,因为只有 node 有历史遗留问题。 * Java 运行环境补充项目启动部分的描述。 * 更新一些环境变量的名称。
1 parent 51538b1 commit 42f9bae

File tree

5 files changed

+85
-51
lines changed

5 files changed

+85
-51
lines changed

model.coffee

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ exports.getBlocks = (tmpl, impl) ->
3636
return blocks
3737

3838
exports.getVars = (tmpl, impl) ->
39-
varRe = /{%\s?set\s+(\w+)\s?=\s?["'](.*)["']\s?%}/gm
39+
varRe = /{%\s?set\s+(\w+)\s*=\s*["'](.*)["']\s*%}/gm
4040
content = fs.readFileSync(
4141
path.join(__dirname, 'views', "#{tmpl}-#{impl}.md"), {encoding: 'utf-8'})
4242
vars = []

views/leanengine_webhosting_guide-java.md

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,38 @@
2121
```
2222
这样云引擎部署时会打包生成对应的 war 包。
2323

24-
如果你需要进行本地调试,可以通过在 pom.xml 中增加 jetty plugin 来本地运行项目。具体的配置你可以参考我们的[实例代码] (https://github.com/leancloud/java-war-getting-started/blob/master/pom.xml)。
24+
如果你需要进行本地调试,可以通过在 pom.xml 中增加 jetty plugin 来作为 Servlet 容器运行 war 包,具体的配置可以参考我们的 [示例代码](https://github.com/leancloud/java-war-getting-started/blob/master/pom.xml) 。但这样并不能直接使用类似于 `mvn jetty:run` 来启动应用,因为云引擎应用启动需要一些 [环境变量](#环境变量),否则无法完成初始化。
25+
26+
以下有几种方式可以本地启动:
27+
28+
#### 命令行工具
29+
30+
命令行工具 [v1.3.2](https://github.com/leancloud/avoscloud-code-command/blob/master/changelog.md#v132) 及之后的版本支持云引擎 Java 应用的本地启动,并为 JVM 进程设置需要的环境变量,在项目根目录执行 `lean up`,根据提示输入 `appId``masterKey` 等信息,命令行工具会调用 `mvn jetty:run` 来启动应用。
31+
32+
**提示**:相对于其他启动方式,命令行工具有 [多应用管理](leanengine_cli.html#多应用管理) 功能,可以方便的切换不同应用环境。
33+
34+
#### 使用 Eclipse 启动应用
35+
36+
首先确保 Eclipse 已经安装 Maven 插件,并将项目以 `Maven Project` 方式导入 Eclipse 中,在 `Package Explorer` 视图右键点击项目,选择 `Run As` -> `Maven build...`,将 `Main` 标签页的 `Goals` 设置为 `jetty:run`,将 `Environment` 标签页增加一些列环境变量和相应的值:
37+
38+
* LEANCLOUD_APP_ENV = development
39+
* LEANCLOUD_APP_ID = {{appid}}
40+
* LEANCLOUD_APP_KEY = {{appkey}}
41+
* LEANCLOUD_APP_MASTER_KEY = {{masterkey}}
42+
* LEANCLOUD_APP_MASTER_KEY = 3000
43+
44+
#### 命令行设置环境变量启动
45+
46+
可以使用类似下面的命令来启动应用:
47+
48+
```
49+
LEANCLOUD_APP_ENV=development \
50+
LEANCLOUD_APP_ID={{appid}} \
51+
LEANCLOUD_APP_KEY={{appkey}} \
52+
LEANCLOUD_APP_MASTER_KEY={{masterkey}} \
53+
LEANCLOUD_APP_MASTER_KEY=3000 \
54+
mvn jetty:run
55+
```
2556
{% endblock %}
2657

2758
{% block ping %}
@@ -96,7 +127,7 @@ Java 云引擎只支持 1.8 运行环境和 war 包运行
96127
<artifactId>leanengine</artifactId>
97128
<version>0.0.1-SNAPSHOT</version>
98129
</dependency>
99-
</dependencies>
130+
</dependencies>
100131
```
101132

102133
* 初始化:在正式使用数据存储之前,你需要使用自己的应用 key 进行初始化中间件:
@@ -145,7 +176,7 @@ EngineRequestContext.getRemoteAddress();
145176
{% block get_env %}
146177

147178
```java
148-
String env = System.getenv("LC_APP_ENV");
179+
String env = System.getenv("LEANCLOUD_APP_ENV");
149180
if (env.equals("development")) {
150181
// 当前环境为「开发环境」,是由命令行工具启动的
151182
} else if (env.equals("production")) {
@@ -174,19 +205,21 @@ if (env.equals("development")) {
174205

175206
{% block code_upload_file_sdk_function %}
176207

208+
```
177209
@WebServlet("/upload")
178210
@MultipartConfig
179211
public class UploadServlet extends HttpServlet {
180212
181-
@Override
182-
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
213+
@Override
214+
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
183215
String description = request.getParameter("description"); // Retrieves <input type="text" name="description">
184216
Part filePart = request.getPart("iconImage"); // Retrieves <input type="file" name="file">
185217
String fileName = filePart.getSubmittedFileName();
186218
InputStream fileContent = filePart.getInputStream();
187219
// ... (do your job here)
220+
}
188221
}
189-
}
222+
```
190223
{% endblock %}
191224

192225
{% block cookie_session %}

views/leanengine_webhosting_guide-node.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,45 @@ if (NODE_ENV === 'development') {
323323
}
324324
```
325325
{% endblock %}
326+
327+
{% block section_timezone %}
328+
## 时区问题
329+
330+
因为某些原因,云引擎 2.0 默认使用的是 UTC 时间,这给很多开发者带来了困惑,所以我们着重讨论下时区问题。
331+
332+
比如有这样一个时间:`2015-05-05T06:15:22.024Z` (ISO 8601 表示法),最后末尾的 `Z` 表示该时间是 UTC 时间。
333+
334+
上面的时间等价于:`2015-05-05T14:15:22.024+0800`,注意此时末尾是 `+0800` 表示该时间是东八区时间。这两个时间的「小时」部分相差了 8 小时。
335+
336+
### 时区问题产生的原因
337+
338+
很多开发者在时间处理上会忽略「时区」标志,导致最后总是莫名其妙的出现 8 小时的偏差。
339+
340+
【场景一】某开发者开发的应用使用云引擎的主机托管功能做了一个网站,其中有时间格式的表单提交。某用户使用浏览器访问该网站,提交表单,时间格式为:`2015-05-05 14:15:22.024`,注意该时间没有「时区」标志。因为这个时间是浏览器生成的,而该用户浏览器上的时间通常是东八区时间,所以该业务数据希望表达的时间是「东八区的 14 点」。
341+
342+
该时间 `2015-05-05 14:15:22.024` 提交到服务器,被转换为 Date 类型(JavaScript 代码:`new Date('2015-05-05 14:15:22.024')`)。因为云引擎 2.0 使用的是 UTC 时间,所以该时间会被处理为 `2015-05-05T14:15:22.024Z`,即「UTC 时间的 14 点」。导致最后获得的时间和期望时间相差了 8 小时。
343+
344+
解决上面的办法很简单:时间格式带上时区标志。即浏览器上传时间时使用 `2015-05-05T14:15:22.024+0800`,这样不管服务端默认使用什么时区,带有时区的时间格式转换的 Date 都不会有歧义。
345+
346+
【场景二】从数据库获取某记录的 `createdAt` 属性,假设值为:`2015-04-09T03:35:09.678Z`。因为云引擎默认时区是 UTC,所以一些时间函数的返回结果如下:
347+
348+
函数|结果
349+
---|---
350+
`toISOString`|2015-04-09T03:35:09.678Z
351+
`toLocaleString`|Thu Apr 09 2015 03:35:09 GMT+0000 (UTC)
352+
`toUTCString`|Thu, 09 Apr 2015 03:35:09 GMT
353+
`toString`|Thu Apr 09 2015 03:35:09 GMT+0000 (UTC)
354+
`getHours`|3,如果将 getHours 的结果返回给浏览器,或者作为业务数据使用,则会出现 8 小时的偏差。
355+
356+
如果需要获取小时数据,解决办法是使用第三方的组件,比如 [moment-timezone](http://momentjs.com/timezone/),通过下面的方式可以获得东八区的小时时间:
357+
358+
```javascript
359+
var time = moment(obj.createdAt).tz('Asia/Shanghai');
360+
console.log('toString', time.toString());
361+
console.log('getHours', time.hours());
362+
```
363+
364+
### 云引擎 2.0 和云引擎时区的差异
365+
366+
为了方便大家的使用,更加符合通常的习惯,云引擎运行时环境(无沙箱的 Node.js 环境和 Python 环境)都是使用**东八区**作为默认时区。当然,我们仍然建议程序的时间字符串带有时区标志。
367+
{% endblock %}

views/leanengine_webhosting_guide-php.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ PHP 云引擎暂不支持其它版本。
259259

260260
{% block get_env %}
261261
```php
262-
$env = getenv("LC_APP_ENV");
262+
$env = getenv("LEANCLOUD_APP_ENV");
263263
if ($env === "development") {
264264
// 当前环境为「开发环境」,是由命令行工具启动的
265265
} else if ($env === "production") {

views/leanengine_webhosting_guide.tmpl

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
- [Node.js](leanengine_webhosting_guide-node.html)
1818
- [Python](leanengine_guide-python.html)
1919
- [PHP](leanengine_webhosting_guide-php.html)
20+
- [Java](leanengine_webhosting_guide-java.html)
2021

2122
## 项目约束
2223

@@ -221,49 +222,7 @@ ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5EZmrZZjbKb07yipeSkL+Hm+9mZAqyMfPu6BTAib+RVy
221222

222223
**注意**:日志单行最大 4096 个字符,多余部分会被丢弃;日志输出频率大于 600 条/分钟,多余的部分会被丢弃。
223224

224-
{% block section_timezone %}
225-
## 时区问题
226-
227-
因为某些原因,云引擎 2.0 默认使用的是 UTC 时间,这给很多开发者带来了困惑,所以我们着重讨论下时区问题。
228-
229-
比如有这样一个时间:`2015-05-05T06:15:22.024Z` (ISO 8601 表示法),最后末尾的 `Z` 表示该时间是 UTC 时间。
230-
231-
上面的时间等价于:`2015-05-05T14:15:22.024+0800`,注意此时末尾是 `+0800` 表示该时间是东八区时间。这两个时间的「小时」部分相差了 8 小时。
232-
233-
### 时区问题产生的原因
234-
235-
很多开发者在时间处理上会忽略「时区」标志,导致最后总是莫名其妙的出现 8 小时的偏差。
236-
237-
【场景一】某开发者开发的应用使用云引擎的主机托管功能做了一个网站,其中有时间格式的表单提交。某用户使用浏览器访问该网站,提交表单,时间格式为:`2015-05-05 14:15:22.024`,注意该时间没有「时区」标志。因为这个时间是浏览器生成的,而该用户浏览器上的时间通常是东八区时间,所以该业务数据希望表达的时间是「东八区的 14 点」。
238-
239-
该时间 `2015-05-05 14:15:22.024` 提交到服务器,被转换为 Date 类型(JavaScript 代码:`new Date('2015-05-05 14:15:22.024')`)。因为云引擎 2.0 使用的是 UTC 时间,所以该时间会被处理为 `2015-05-05T14:15:22.024Z`,即「UTC 时间的 14 点」。导致最后获得的时间和期望时间相差了 8 小时。
240-
241-
解决上面的办法很简单:时间格式带上时区标志。即浏览器上传时间时使用 `2015-05-05T14:15:22.024+0800`,这样不管服务端默认使用什么时区,带有时区的时间格式转换的 Date 都不会有歧义。
242-
243-
【场景二】从数据库获取某记录的 `createdAt` 属性,假设值为:`2015-04-09T03:35:09.678Z`。因为云引擎默认时区是 UTC,所以一些时间函数的返回结果如下:
244-
245-
函数|结果
246-
---|---
247-
`toISOString`|2015-04-09T03:35:09.678Z
248-
`toLocaleString`|Thu Apr 09 2015 03:35:09 GMT+0000 (UTC)
249-
`toUTCString`|Thu, 09 Apr 2015 03:35:09 GMT
250-
`toString`|Thu Apr 09 2015 03:35:09 GMT+0000 (UTC)
251-
`getHours`|3,如果将 getHours 的结果返回给浏览器,或者作为业务数据使用,则会出现 8 小时的偏差。
252-
253-
如果需要获取小时数据,解决办法是使用第三方的组件,比如 [moment-timezone](http://momentjs.com/timezone/),通过下面的方式可以获得东八区的小时时间:
254-
255-
```javascript
256-
var time = moment(obj.createdAt).tz('Asia/Shanghai');
257-
console.log('toString', time.toString());
258-
console.log('getHours', time.hours());
259-
```
260-
261-
### 云引擎 2.0 和云引擎时区的差异
262-
263-
为了方便大家的使用,更加符合通常的习惯,云引擎运行时环境(无沙箱的 Node.js 环境和 Python 环境)都是使用**东八区**作为默认时区。当然,我们仍然建议程序的时间字符串带有时区标志。
264-
265-
{% block introduceCloudCodeV2 %}{% endblock %}
266-
{% endblock %}
225+
{% block section_timezone %}{% endblock %}
267226

268227
## 绑定独立域名
269228

0 commit comments

Comments
 (0)