2011年12月4日 星期日

免费天气预报weatherlib部署方法(12.9更新代码和war档部署方法)

     2011-12-10 Update:

更新程序,天气邮件中的网址http://weather.terrynow.com改成各自的http://yourappid.appspot.com
说明:
1) 如果您部署本程序,如果修改首页,希望你能保留我的博客等版权信息和广告的内容(当然也不能强迫哈)
2) 现在程序默认总定制数是80个,单个用户的定制数是10个,考虑到总的邮件数是100,另外还有发送验证邮件、测试邮件或者发送错误重新发送等原因,总定制数为80,如果你要修改总定制数,可以搜索代码里出现的80的地方改成你想要的数字(少于100),单个用户的定制数默认是10,代码中可以改,或者到https://appengine.google.com后台,点击Datastore Viewer,找到Account下的账户,把slimit的数值,从10改成其他你想要的。

2011-12-9 Update:

  1.       更新代码修正有时无法查询天气的问题
  2.       更新代码修正只能发送测试邮件,无法定时发送的问题
  3.       可以用war包上传办法,从而不需要Eclipse了,详见最后的说明

      自Google把免费配额降低后(一天只能发100封邮件),本人就打算放弃这个项目了,不过还是有很多热心网友一直询问进展,我也是忙着忙那,来不及管这些,不过zhen zhao 网友一直不懈努力,终于搞出来了,呵呵,可喜可贺,并把他的一路忙下来的教程发给我,让我公布到博客上,这里也感谢这位网友!


1、 http://www.oracle.com/technetwork/java/javase/downloads/index.html,下载jdk,建议下载1.6(JDK6),默认安装。
2、 http://www.eclipse.org/downloads/,下载Eclipse,解压到D:。打开d:\eclipse,运行eclipse.exe,点help菜单下的install new softwore,在work with 填写http://dl.google.com/eclipse/plugin/3.7
(这里补充下,截图里的第三个GWT Designer for GPE可不用勾上)
漫长的等待,点下一步安装。

安装完成后Eclipse重启。图标G出现就安装成功了。呵呵,要有耐心哦。
2、 下载Google App Engine SDK for Java, https://code.google.com/intl/zh-CN/appengine/downloads.html,解压到D:
3、 下载weatherlib源代码(GoogleCode上的比较老了,请下载最新的,点这里),解压weatherlib。
4、 打开Eclipse的file下Import,  下一步。Browse找到weatherlib,点击finish。

5、 按ALT加ENTER键,Txt file encoding , 改成UTF-8

java Build path ,App Engine SDK,找到解压到D:的appengine-java-sdk-1.6.0导入,JRE system library 找到安装的JDK目录导入。


6、 
deploy to app engine , 改为自己的
,Deploy,成功了。





新增的war包部署方法:


1)同样需要下载JDK,详见上面步骤的第一步
2)下载Google App Engine SDK for java 详见第三步
3)点这里下载代码后,解压找到里面的war包,距离war包的地址是D:\weatherlib\war
修改D:\weatherlib\war\WEB-INF\appengine-web.xml 把这里的your_app_id 的your_app_id换成你实际的ID
4)开始-运行-cmd
切换到你的Google App Engine的SDK的目录的bin下:
比如


C:\Documents and Settings\user>e:
E:\>cd appengine-java-sdk\bin\
E:\appengine-java-sdk\bin>appcfg.cmd update D:\weatherlib\war


根据提示输入用户名和密码就可以了

23 评论:

xysmzp 说...

感谢Terry为我们提供这么好的天气程序。非常实用,感谢Terry的热情帮助!

Terry 说...

@xysmzp 你客气啦:)也谢谢你提供教程!

Deccin 说...

非常感谢二位的辛勤劳动了!本来已经放弃等待了,没想到还有新的进展!
这两天一直在准备学习GAE的知识,因为账号早就申请好了的,回来转转,没想到教程出来了,非常高兴啊!
希望教程能帮助更多的人了解GAE,同时也希望它能帮助更多有需要的人!让我们一起努力!

尚善若水 说...

非常感谢二位
折腾了几天
终于成功了

说明一下
由于墙的问题
直接上传会失败。。。

尚善若水 说...

大神请帮忙

部署成功了
就是不能自动发邮件
是啥问题?

Deccin 说...

我上传后出现500server error:

Error: Server Error

The server encountered an error and could not complete your request.
If the problem persists, please report your problem and mention this error message and the query that caused it.

这个又是什么问题呢?

Terry 说...

楼上两位,你们检查下,你的Eclipse项目里,war/WEB-INF/lib下是否有一下这些jar,
如果没有,就去Google的SDK里copy过去,或者到Problem下去修复
appengine-api-1.0-sdk-1.6.0.jar
appengine-api-labs-1.6.0.jar
appengine-jsr107cache-1.6.0.jar
commons-logging-1.1.1.jar
datanucleus-appengine-1.0.10.final.jar
datanucleus-core-1.1.5.jar
datanucleus-jpa-1.1.5.jar
geronimo-jpa_3.0_spec-1.1.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
jdo2-api-2.3-eb.jar
jsoup-1.3.1.jar
jsr107cache-1.1.jar
org.json.jar

尚善若水 说...

这些个jar都是有的
部署成功
测试邮件也可以发送
就是定时邮件发不出去。。。

Terry 说...

我在想想办法,检查一下什么原因,到时候再公布!

Terry 说...

今天又更新了代码,请再看下博客再重新上传试试看

尚善若水 说...

这次可以了
非常感谢啊

Deccin 说...

经过Terry无数次的调试,这次终于可以啦!
再次感谢Terry所付出的努力!

尚善若水 说...

请问下
每个邮箱限定两条的设置在哪里改?

Terry 说...

java代码:
com.terry.weatherlib.servlet.WebManagerServlet
大概453行:
int ecount = getEmailScheduleCount(email);
if ((!update && ecount >= 2)
|| (update && schedule != null
&& !schedule.getEmail().equals(email) && ecount >= 2)) {
try {
jo.put("message", "接收邮箱" + email + "已定制" + ecount
+ "条,为了让他人有机会定制,暂时无法为您保存");
} catch (JSONException e) {
}
return jo;
}

其实你可以搜索下相关的提示语,就可以了

dominus.illuminatio.mea 说...

首先感谢Terry的聪明智慧和辛苦工作
这里有一事请教:
按照"war包部署方法",
执行 appcfg.cmd update C:\weatherlib\war 后提示失败
log如下:
Unable to update: com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files. at com.google.appengine.tools.admin.Application.compileJsps(Application.java:582) at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:434) at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:311) at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52) at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:619) at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:160) at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:67) at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:63) com.google.appengine.tools.admin.AdminException: Unable to update app: Failed to compile jsp files. at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:318) at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:52) at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:619) at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:160) at com.google.appengine.tools.admin.AppCfg.(AppCfg.java:67) at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:63) Caused by: com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files. at com.google.appengine.tools.admin.Application.compileJsps(Application.java:582) at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:434) at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:311) ... 5 more

请问有没有什么办法解决?

多谢您的宝贵答复,
:-)

Terry Yao 说...

Eclipse中确保用的是JDK而不是JRE
Windows-Preferences-Java-Installed JREs
如果右边显示的是JRE而不是JDK,请修改路径,默认按照java的路径,有个JRE,不过也有JDK,你稍微修改下。

dominus.illuminatio.mea 说...

请教:
第5步,弹出错误提示:
Java Virtal Machine Launcher
Could not find the main class: com.google.appengine.tools.enhancer.Enhancer. Program will exit.

控制台
java.lang.NoClassDefFoundError: com/google/appengine/tools/enhancer/Enhance
Caused by: java.lang.ClassNotFoundException: com.google.appengine.tools.enhancer.Enhance
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread "main"

已经爬文没找到解决方法.
新手, 请多多指教!
感谢您的宝贵时间和答复 :-)

Terry Yao 说...

这个我也不太清楚了,要么你Project-Clean一下,要不然你就用第二种war包部署方法吧。

WavierLEE 说...

你好,Terry,部署时出现“403 Forbidden
You do not have permission to modify this app (app_id=u'wavesdk').”
而且我也没有在appengine-web.xml中找到your_app_id字样。
谢谢!

Terry Yao 说...

@WavierLEE 我重新上传了,你再下载一次weatherlib.zip, 这次你能找到your_app_id了

Wavier LEE 说...

谢谢,Terry, THX !

寒冰 说...

出现提示 an error occurred at line :-1 in the generated java file

寒冰 说...
此评论已被作者删除。