heroku使用笔记

 

这两天将一个项目转到了heroku上面,哎呀我的个神,真心不好用:

 

Java:

https://devcenter.heroku.com/articles/java-support

默认不支持mysql而是支持protress,但是可用addon--cleardb来集成mysql,cleardb也有免费的级别。

但是即使是免费级别,必须要通过身份验证,也就是验证你的信用卡,否则无法添加addon。

 

http://www.ibm.com/developerworks/cn/java/j-javadev2-21/

maven不是必需的,可以直接发布war包 https://devcenter.heroku.com/articles/war-deployment

 

eclipse插件安装:

https://devcenter.heroku.com/articles/getting-started-with-heroku-eclipse

这个安装总是报错,尝试几次才成功,要看人品了。有了这个才差不多,否则那个控制台工具真不好用。

 

不存在永久的文件系统

https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem

http://stackoverflow.com/questions/12123050/no-permanent-filesystem-for-heroku

只能两个可写文件夹https://devcenter.heroku.com/articles/read-only-filesystem

./tmp ./log

 

servletContext.getRealPath();返回null问题,这是因为使用的webrunner跑的是未展开的war包。

解决办法是:

pom里面配置为展开war文件夹:

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.2</version>
				<executions>
				  <execution>
				    <phase>package</phase>
				    <goals><goal>exploded</goal></goals>
				    <configuration>
				      <webappDirectory>${build.directory}/webapp</webappDirectory>
				    </configuration>
				  </execution>
				</executions>				
			</plugin>

然后在Procfile里面指定webruner的目标(procfile是heroku添加参数的方法):

web: java $JAVA_OPTS -Dspring.profiles.active=prod -Dmidware.path.conf="distributed" -jar target/dependency/webapp-runner.jar --port $PORT target/webapp

 

这其实就是配置webrunner跑文件夹。

注:procfile的注释也是#号。

这样就可以得到webapp运行目录了,而且,此目录下的文件也是可写的!

但是要注意保持这个概念,都是临时性的文件系统,你用的时候要考虑这一点。

 

这里面讲了大部分问题:

https://devcenter.heroku.com/articles/java-faq

是直接发布war包还是用maven+嵌入的容器?

后者更容易发布,修改代码后直接构建测试,和heroku环境更接近。

而且源码方式更容易改配置,对于开发来说,每次改一个文件要传半天是很麻烦的。

项目目录下有个Procfile文件,heroku会依据其来启动,你可以修改它来添加系统参数。

https://devcenter.heroku.com/articles/procfile#deploying-to-heroku

本地运行可参见项目下的readme.md

例如:$java -jar target/dependency/webapp-runner.jar target/*.war

这个使用的jsimone项目,可在eclipse里面调试:

https://github.com/jsimone/webapp-runner

添加引用:

<dependency> 

 <groupId>com.github.jsimone</groupId> 

 <artifactId>webapp-runner</artifactId> 

 <version>7.0.34.1</version> 

 <scope>provided</scope> 

</dependency> 

运行配置:

Right-click on your project and choose 'Debug As -> Debug Configurations...'

From the 'Debug Configuration' window create a new 'Java Application' launch configuration by double-clicking on 'Java Application' in the left hand list or right-clicking on it and selecting 'New' 类型为java工程

Give your launch configuration a sensible name. Then enter the name of your project in the 'Project' box

Enter 'webapp.runner.launch.Main' in the 'Main Class' box 启动类为webapp.runner.launch.Main;--path /abc --port 10080 (--path是指context)

java -jar target/dependency/webapp-runner.jar --help 参见所有参数

Click on the 'Arguments' tab and enter './src/main/webapp' in the 'Program Arguments' box 添加程序参数./src/main/webapp

Click 'Apply' and then 'Run'

 

需要注意的几点:

1:tomcat7较高版本有自带的servletapi依赖,如果你配置了自己的servletapi则可能造成冲突,例如报错:

java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig

说明你配置的servletapi版本太低。这就需要将你配置的servletapi去掉而依赖jsimone的包。在打包时这个不应该包含在包中,因为实际环境的容器都应该有自己的servlet包。

 

由于是分布式结构,不存在任何共享数据(数据库,memcache这些是另外的概念除外),所以实例之间的线程是互不可见的。

 

mysql:cleardb:

怎样查看信息,远程连接:

http://stackoverflow.com/questions/9822313/remote-connect-to-cleardb-heroku-database

运行heroku config --app 你app的名字就可看到信息。

通过此信息可以远程连接,例如heidisql可直接连,但是官方推荐的是用ssl连接:

https://devcenter.heroku.com/articles/cleardb#using-ssl-with-cleardb-and-rails

默认的cleardb信息是在环境变量里的,可以依据此变量来,

https://devcenter.heroku.com/articles/cleardb#using-cleardb-in-a-play-framework-app

当然你可以copy出变量信息直接用在程序中。

 

 

 

这里吐槽一下,那个自带的工具真是垃圾,不能粘贴,不能复制,有时还显示错行,powercommand里面怎么也运行不正确,所以还是eclipse插件靠谱。

例如查看程序信息,可得到cleardb的参数:

Snap1

 

可导入已存在项目,也可以创建项目,提交到git上后heroku会自动重启。

可直接通过console查看日志,很方便。

 

 

再来吐槽一下它的客服:

慢!问了个问题24小时之后才得到回复,而且由于是java相关问题,他又转到了编程人员,这样第三天才得到回复。

 

它的GIT经常访问不了,理由你懂得. http://ruby-china.org/topics/10813


    Total views.

    © 2013 - 2018. All rights reserved.

    Powered by Hydejack v6.6.1