Heroku和Github集成(如何构建项目)

时间:2010-03-16 13:30:27

标签: deployment github heroku

我正在创建一个web服务,我想将源存储在github上并在heroku上运行应用程序。到目前为止,我还没有在'网上的任何地方看到过我的确切场景,所以我会在这里问:

我想拥有以下目录结构:

/project
  .git
  README <-- project readme file
  TODO.otl <-- project outline
  ... <-- other project-related stuff
  /my_rails_app
     app
     config
     ...
     README <-- rails' readme file 

在上面,项目对应http://github.com/myuser/project,而my_rails_app是应该推送到heroku的代码。我是否需要为rails应用程序提供单独的分支,或者是否有一种我更缺失的简单方法?

我想我的项目相关的非rails文件可以存在于my_rails_app中,但是rails README已经存在,并且覆盖它似乎不一致。但是,如果我离开它,我的rails应用程序的github页面将包含rails自述文件,这没有任何意义。

另外......我尝试按照上面的说明进行设置并运行

git push heroku
从主项目文件夹

。当然,heroku不知道我想部署子文件夹:

-----> Heroku receiving push
 !     Heroku push rejected, no Rails or Rack app detected.

4 个答案:

答案 0 :(得分:18)

这是一个简单的解决方案,可能适用于您,也可能不适合您。

  • 在GitHub上创建两个项目。一个项目应该只是Rails应用程序(即Rails应用程序目录中的所有内容)。另一个项目应该是Rails应用程序目录之外的所有内容。

  • 将Rails应用程序项目添加为“容器”项目中的git-submodule。

  • 现在,您可以单独将Heroku作为远程添加到Rails应用程序存储库中,并将其推送到heroku。 Heroku将接受推送,因为它只是一个带有预期目录和文件的Rails应用程序。

答案 1 :(得分:6)

Heroku情况的解决方案(不是自述文件):

如果您正在使用新的Heroku Cedar(我相信在您第一次提出问题时它不可用),那么您的流程(如rails服务器流程)将使用Foreman启动。因此,您可以在根github目录中放置Procfile,如下所示:

web:     my_rails_app/script/runserver.sh

然后my_rails_app/script/runserver.sh可能是一个简单的

#!/bin/sh

cd my_rails_app
bundle exec rails server -p $PORT

在本地,你还应该创建一个名为.env的文件(注意开头的。),其中包含

PORT=3000

此文件由foreman读取并用于设置环境变量,以便在您的计算机上执行foreman start时设置端口(从Procg文件所在的根github目录)。 Heroku服务器负责处理你的dyno上的.env文件。最大的优点是你可以在dyno上设置多个进程!

答案 2 :(得分:4)

只需覆盖Rails的默认README文件即可。没有理由保持它。将其他与项目管理相关的内容放在doc目录中。虽然你肯定有正当理由想要按照你的方式进行设置,但你只是因为违反惯例而让自己感到头疼,而且可能不值得受益。

答案 3 :(得分:0)

我会将/my_rails_app下的所有内容添加到Heroku git存储库中。然后将GitHub添加为远程,并将/project下的所有内容添加到GitHub存储库。然后你可以将Rails应用程序推送到Heroku(来自/my_rails_app)并将整个项目推送到GitHub(来自/project)。