Open GoogleCodeExporter opened 9 years ago
InstallGuideOnHeroku
距最初写的时候,基本上快一年了的,而Heroku CLI( Command Line
Interface ) 从没有gem 到更新到 heroku-gem/2.33.2 (i386-mingw32)
ruby/1.9.3 ( 甚至" ! The 'heroku' gem has been deprecated and replaced
with the Heroku Toolbelt
, download and install from https://toolbelt.heroku.com .",但仍可使用
),WIKI需要更新一下了。Heroku
CLI的指令也略有变化,但是兼容之前的指令,我也就懒得更��
�的。但既然你都创建个Issue了的。明天我应该有时间吧!到��
�更新,顺便写个简单的Heroku
CLI使用说明。今天不行。一堆的作业要今天必须完成的。
Original comment by goknmuse
on 3 Dec 2012 at 8:24
@ goknmuse
Snova 更新就很方便
heroku deploy:war --war <path_to_war_file> --app <app_name>
可是这个命令却不能用在Apjp上 - -!
官网上都是鸟语,看到头就大
上鸟语课的时候逃学了,现在后悔了!
当然,你有时间更新下Wiki是最好的:)
Original comment by Jmak810...@gmail.com
on 3 Dec 2012 at 9:46
"我之前已经建好一个app了" 和
"我现在想在建好的这个app上上传服务端,而不是新建一个app�
��传",让我有点混淆。我的理解是,你只是执行了 $ heroku
create (等价于 $heroku apps:create,详见$ heroku help create)。
$ heroku create
>>> Creating <AppName>... done, stack is cedar
>>> http://<AppName>.herokuapp.com/ | git@heroku.com:<AppName>.git
但并没有,在此AppName下上传任何程序的。
Original comment by goknmuse
on 4 Dec 2012 at 3:19
昨晚做作业到很晚,今天又上一天的课,好累了。明天还要��
�一天的有机实验的。So,
我最好今晚早点上床的。你应该也不急的哈,明晚我再继续��
�。
有时间的话,可以看看此书 ( http://git-scm.com/book/zh
),学点git,相当有用的。
Original comment by goknmuse
on 4 Dec 2012 at 3:22
D:\****>heroku create --stack cedar
Creating obscure-****-5027... done, stack is cedar
http://obscure-****-5027.herokuapp.com/ | git@heroku.com:obscure-****-5027.g
it
Git remote heroku added
D:\****>heroku create --stack cedar
Creating dry-****-6799... done, stack is cedar
http://dry-****-6799.herokuapp.com/ | git@heroku.com:dry-****-6799.git
Git remote heroku added
D:\****>git push heroku master
Counting objects: 6, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 4.41 KiB, done.
Total 6 (delta 0), reused 0 (delta 0)
-----> Heroku receiving push
-----> Python app detected
-----> Preparing Python interpreter (2.7.2)
-----> Creating Virtualenv (1.8.4)
Also creating executable in .heroku/venv/bin/python
Installing distribute...done.
Installing pip...done.
Running virtualenv with interpreter /usr/local/bin/python2.7
-----> Installing dependencies using pip (1.1)
Downloading/unpacking gevent (from -r requirements.txt (line 1))
Creating supposed download cache at /app/tmp/repo.git/.cache/pip_download
s
Storing download in cache at /app/tmp/repo.git/.cache/pip_downloads/htt
p%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fg%2Fgevent%2Fgevent-0.13.8.tar.g
z
Running setup.py egg_info for package gevent
Downloading/unpacking greenlet (from gevent->-r requirements.txt (line 1)
)
Storing download in cache at /app/tmp/repo.git/.cache/pip_downloads/htt
p%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fg%2Fgreenlet%2Fgreenlet-0.4.0.zi
p
Running setup.py egg_info for package greenlet
Installing collected packages: gevent, greenlet
Running setup.py install for gevent
building 'gevent.core' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wal
l -Wstrict-prototypes -fPIC -I/usr/local/include/python2.7 -c gevent/core.c -o b
uild/temp.linux-x86_64-2.7/gevent/core.o
gcc -pthread -shared build/temp.linux-x86_64-2.7/gevent/core.o -leven
t -o build/lib.linux-x86_64-2.7/gevent/core.so
Linking /tmp/build_3o30iomgtbo3f/.heroku/venv/build/gevent/build/lib.
linux-x86_64-2.7/gevent/core.so to /tmp/build_3o30iomgtbo3f/.heroku/venv/build/g
event/gevent/core.so
Running setup.py install for greenlet
building 'greenlet' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wal
l -Wstrict-prototypes -fPIC -I/usr/local/include/python2.7 -c greenlet.c -o buil
d/temp.linux-x86_64-2.7/greenlet.o
greenlet.c: In function 'g_switch':
greenlet.c:543: warning: 'err' may be used uninitialized in this func
tion
gcc -pthread -shared build/temp.linux-x86_64-2.7/greenlet.o -o build/
lib.linux-x86_64-2.7/greenlet.so
Linking /tmp/build_3o30iomgtbo3f/.heroku/venv/build/greenlet/build/li
b.linux-x86_64-2.7/greenlet.so to /tmp/build_3o30iomgtbo3f/.heroku/venv/build/gr
eenlet/greenlet.so
Successfully installed gevent greenlet
Cleaning up...
-----> Discovering process types
Procfile declares types -> web
-----> Compiled slug size: 3.0MB
-----> Launching... done, v4
http://dry-****-6799.herokuapp.com deployed to Heroku
To git@heroku.com:dry-****-6799.git
* [new branch] master -> master
其实我的意思是这样,如上面所示:我之前建了一个名为<obsc
ure-****-5027>的app
然后我又建了一个名为<dry-****-6799>的app
我现在就想往5027这个app上上传服务端,而不是6799这个app,可
是按照wiki上的教程却上传到了6799
如果我想上传到5027这个APP上应该怎么做?
我好像说的有点混乱了,不知道是否你能明白我说的
Original comment by Jmak810...@gmail.com
on 4 Dec 2012 at 3:58
上面忘记写了,这里补上
感谢你在百忙之中抽出时间来回复问题,我不急的,你忙完��
�己的事情再慢慢来答复我的问题吧,你推荐的那个关于Git的�
��料,我会去看看的,谢谢:)
Original comment by Jmak810...@gmail.com
on 4 Dec 2012 at 4:01
假设将APJP_REMOTE_JAVA_HEROKU-1.0.0.zip
文件解压出的文件放于C:\APJP\APJP_REMOTE_JAVA_HEROKU-1.0.0,里面包�
��src文件夹和pom.xml, Procfile,
README.txt三个文件。APJP_REMOTE_JAVA_HEROKU-1.0.0文件夹中只是含有��
�序的源代码的,不是Git repo (repo 是repository
的简写,"库"的意思。)。
$ cd /d D:\APJP\APJP_REMOTE_JAVA_HEROKU-1.0.0>
切换到应用所在目录,以下指令未作说明,均在此目录下执��
�。
$ git init
>>> Initialized empty Git repository in
C:\APJP\APJP_REMOTE_JAVA_HEROKU-1.0.0\.git\
在APJP_REMOTE_JAVA_HEROKU-1.0.0文件夹中创建一个空的git
repo。执行完此命令,里面会生成一下git
repo所需的配置文件在.git中( Tip: Unix / Linux
中以"."开头的文件名,文件夹名,属于隐藏文件的。Windows不�
��。)。但此时索引(index)并没有记录repo包含哪些文件的。
$ git add .
将当前目录的所有文件加入索引中, to prepare the content staged
for the next commit。
$ git commit -m "init"
>>> [master (root-commit) bd20102] init
19 files changed, 1501 insertions(+), 0 deletions(-)
create mode 100644 Procfile
create mode 100644 README.txt
create mode 100644 pom.xml
create mode 100644 src/main/java/APJP/HTTP/HTTPServlet.java
create mode 100644 src/main/java/APJP/HTTP11/HTTPMessage.java
create mode 100644 src/main/java/APJP/HTTP11/HTTPMessageException.java
create mode 100644 src/main/java/APJP/HTTP11/HTTPMessageHeader.java
create mode 100644 src/main/java/APJP/HTTP11/HTTPMessageHeaders.java
create mode 100644 src/main/java/APJP/HTTP11/HTTPRequest.java
create mode 100644 src/main/java/APJP/HTTP11/HTTPRequestException.java
create mode 100644 src/main/java/APJP/HTTP11/HTTPRequestMessage.java
create mode 100644 src/main/java/APJP/HTTP11/HTTPResponseMessage.java
create mode 100644 src/main/java/APJP/HTTP11/HTTPSRequest.java
create mode 100644 src/main/java/APJP/HTTP11/HTTPSRequestException.java
create mode 100644 src/main/java/APJP/HTTPS/HTTPSServlet.java
create mode 100644 src/main/java/APJP/Main.java
create mode 100644 src/main/webapp/WEB-INF/APJP_REMOTE.properties
create mode 100644 src/main/webapp/WEB-INF/web.xml
create mode 100644 src/main/webapp/index.html
保存当前索引中包含的内容到新的提交中,同时,返回log信��
�,说明做了哪些变化。
-m, --message <message>
commit message
$ git remote -v
>>>
什么值也没有返回。( $ git help remote 查看git-remote的具体作用 )
$ heroku create [AppName]
>>> Creating <AppName>... done, stack is cedar
>>> http://<AppName>.herokuapp.com/ | git@heroku.com:<AppName>.git
>>> Git remote heroku added
注意和Comment 3中的区别。"stack is cedar"
默认已是,无需加"--stack cedar"。
$ git remote -v
>>> heroku git@heroku.com:<AppName>.git (fetch)
>>> heroku git@heroku.com:<AppName>.git (push)
heroku create 在git
repo中执行的话,不仅仅是创建个AppName,还将其加入git-remote��
�理的track中的。在非git
repo中,只会创建AppName,此时需要记住
"http://<AppName>.herokuapp.com/ | git@heroku.com:<AppName>.git"
以便后面自己手动添加git-remote的track。
$ git push heroku master
"heroku" 其实只是"heroku git@heroku.com:<AppName>.git (fetch)"中的git
repo地址的名字"heroku"而已,可以自己随便改着玩的。git push
上传应用,"master",以管理员身份上传。
$ heroku open
打开当前文件夹中git repo 中记录的AppName。非heroku
repo中执行,需要加"--app <AppName>"。
至此,在Heroku上成功部署一个App。下面再对这个heroku / git
repo做点更改。
$ heroku create
>>> Creating <AppName>... done, stack is cedar
>>> http://<AppName>.herokuapp.com/ | git@heroku.com:<AppName>.git
返回内容和在非git repo中执行时,一样。WHY?
先记住此时的"git@heroku.com:<AppName>.git"( <AppName>
可以自己定义的,地址也是有规律的,很容易记住的哈
),下面详解。:P
$ git remote -v
>>> heroku git@heroku.com:<AppName>.git (fetch)
>>> heroku git@heroku.com:<AppName>.git (push)
$ git remote rm heroku
>>>
删掉[Name]为heroku的git repo的track,返回值为空
$ git remote -v
>>>
返回值为空
$ git remote add [Name] git@heroku.com:<AppName>.git
"[Name]" 等价于 "heroku git@heroku.com:<AppName>.git (fetch)"
中的"heroku",可以随意起个,如:
"test",推荐使用<AppName>作为[Name],但不要是"heroku",否则下面
的一点小测试,你可能仍不能理解的。"git@heroku.com:<AppName>.git
",就是在非git repo中执行$ heroku create
的返回值,或前面告诉你要记住的内容。
$ git remote -v
>>> [Name] git@heroku.com:<AppName>.git (fetch)
>>> [Name] git@heroku.com:<AppName>.git (push)
$ heroku create [AppName]
>>> Creating <AppName>... done, stack is cedar
>>> http://<AppName>.herokuapp.com/ | git@heroku.com:<AppName>.git
>>> Git remote heroku added
咋和在一个空的git repo中执行时一样的哇?
呵呵。前面一次没有"Git remote heroku added"的。
因为在执行$ heroku create 时,有子进程进行$ git remote add heroku
git@heroku.com:<AppName>.git 会尝试在git repo中添加remote
的track的。但是已经有track的Name为"heroku"
的话,就不会执行的。前面一步虽然添加了git-remote
track的,但是名字不是"heroku",所以还可添加的。
$ git remote rename heroku [NewName]
[NewName] 推荐为<AppName>
$ heroku create
>>> Creating <AppName>... done, stack is cedar
>>> http://<AppName>.herokuapp.com/ | git@heroku.com:<AppName>.git
>>> Git remote heroku added
$ git remote -v
>>> heroku git@heroku.com:<AppName>.git (fetch)
>>> heroku git@heroku.com:<AppName>.git (push)
>>> [Name] git@heroku.com:<AppName>.git (fetch)
>>> [Name] git@heroku.com:<AppName>.git (push)
>>> [NewName] git@heroku.com:<AppName>.git (fetch)
>>> [NewName] git@heroku.com:<AppName>.git (push)
$ git push [Name] mater
$ git push [NewName] master
$ git push heroku master
以上应该明白,不做解释了的哈.
但是,不推荐上传超过两个App的,原因 Issue
108。现在至少已经部署四个的了。
$ heroku apps
>>> === My Apps
<AppName01>
<AppName02>
<AppName03>
<AppName04>
获取已经创建的App的名字
$ heroku destroy <AppName04>
>>>
! WARNING: Potentially Destructive Action
! This command will destroy <AppName04> (including all add-ons)
.
! To proceed, type "<AppName04>" or re-run this command with --
confirm murmuring-anchorage-8843
> <AppName04> ###此处需要在输入一遍<AppName04>
Destroying <AppName04> (including all add-ons)... done
删除应用。
Original comment by goknmuse
on 5 Dec 2012 at 10:07
"heroku plugins:install https://github.com/heroku/heroku-deploy
--只需执行一次,以后不用执行"
我已经有git这个无比强大的工具,还让我再装个有点多余的��
�序,有点强人所难哈。而且我连Heroku
Toolbelt也不是使用Windows上的可执行程序安装的,使用的是Herok
u的gem。
现在应该算是较为完整的解决了你的问题吧?
如有问题,继续回复,但仍是那句算是老话了的,"实在太忙�
��不一定能及时回复,抱歉"。
Original comment by goknmuse
on 5 Dec 2012 at 10:17
:(
我小白菜一棵,看着我晕乎乎,弄了好久都没弄好,后面不��
�道怎么就好了,仍然没明白怎么弄好的,
不过万幸的是,终于达到我要的要求了
我还是多实践几次,再找找相关的资料看看
彻底弄明白其中的原理,最后感谢你的帮助:)
Original comment by Jmak810...@gmail.com
on 5 Dec 2012 at 1:46
@ goknmuse
: )
实践多次,终于明白其中的原理了,现在大概可以熟练的在he
roku上部署了
还有顺便问下CloudFoundry
是否支持部署python的apjp服务端,我根据部署java的方法在CloudF
oundry部署不成功,希望你有时间部署测试下,看看是否能成��
�,等待你的答复
Original comment by Jmak810...@gmail.com
on 5 Dec 2012 at 3:08
$ vmc runtimes
Original comment by goknmuse
on 7 Dec 2012 at 2:21
Original issue reported on code.google.com by
Jmak810...@gmail.com
on 3 Dec 2012 at 7:19