yahaosoft / apjp

Automatically exported from code.google.com/p/apjp
0 stars 0 forks source link

Heroku CLI 简要使用指导 #128

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
根据Wiki上的教程:

heroku login
git init
git add .
git commit -m "init"
heroku create --stack cedar
git push heroku master
heroku open

heroku create --stack cedar(这一步我知道是新建一个app)

现在的情况是这样,我之前已经建好一个app了,我现在想在��
�好的这个app上上传服务端,而不是新建一个app上传   
命令应该怎么打?  

例如app 为 abc   http://abc.herokuapp.com/

望解答,谢谢!!

Original issue reported on code.google.com by Jmak810...@gmail.com on 3 Dec 2012 at 7:19

GoogleCodeExporter commented 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

GoogleCodeExporter commented 9 years ago
@ 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

GoogleCodeExporter commented 9 years ago
"我之前已经建好一个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

GoogleCodeExporter commented 9 years ago
昨晚做作业到很晚,今天又上一天的课,好累了。明天还要��
�一天的有机实验的。So, 
我最好今晚早点上床的。你应该也不急的哈,明晚我再继续��
�。
有时间的话,可以看看此书 ( http://git-scm.com/book/zh 
),学点git,相当有用的。

Original comment by goknmuse on 4 Dec 2012 at 3:22

GoogleCodeExporter commented 9 years ago
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

GoogleCodeExporter commented 9 years ago
上面忘记写了,这里补上

感谢你在百忙之中抽出时间来回复问题,我不急的,你忙完��
�己的事情再慢慢来答复我的问题吧,你推荐的那个关于Git的�
��料,我会去看看的,谢谢:)

Original comment by Jmak810...@gmail.com on 4 Dec 2012 at 4:01

GoogleCodeExporter commented 9 years ago
假设将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

GoogleCodeExporter commented 9 years ago
"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

GoogleCodeExporter commented 9 years ago
:( 
我小白菜一棵,看着我晕乎乎,弄了好久都没弄好,后面不��
�道怎么就好了,仍然没明白怎么弄好的, 
不过万幸的是,终于达到我要的要求了

我还是多实践几次,再找找相关的资料看看  
彻底弄明白其中的原理,最后感谢你的帮助:)

Original comment by Jmak810...@gmail.com on 5 Dec 2012 at 1:46

GoogleCodeExporter commented 9 years ago
@ goknmuse
: ) 
实践多次,终于明白其中的原理了,现在大概可以熟练的在he
roku上部署了

还有顺便问下CloudFoundry 
是否支持部署python的apjp服务端,我根据部署java的方法在CloudF
oundry部署不成功,希望你有时间部署测试下,看看是否能成��
�,等待你的答复

Original comment by Jmak810...@gmail.com on 5 Dec 2012 at 3:08

GoogleCodeExporter commented 9 years ago
$ vmc runtimes

Original comment by goknmuse on 7 Dec 2012 at 2:21