Heroku 和 Github 集成(如何构建项目)
Posted
技术标签:
【中文标题】Heroku 和 Github 集成(如何构建项目)【英文标题】:Heroku and Github integration (how to structure the project) 【发布时间】:2011-01-28 02:52:59 【问题描述】:我正在创建一个网络服务,我想将源代码存储在 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
上面project对应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.
【问题讨论】:
【参考方案1】:这是一个简单的解决方案,可能对您有用,也可能对您无效。
在 GitHub 上创建两个项目。一个项目应该只是 Rails 应用程序(即 Rails 应用程序目录中的所有内容)。另一个项目应该是 Rails 应用目录之外的所有内容。
将 Rails 应用项目添加为“容器”项目中的 git-submodule。
现在您可以将 Heroku 作为远程单独添加到 Rails 应用程序存储库中,然后将其推送到 heroku。 Heroku 将接受推送,因为它只是一个带有预期目录和文件的 Rails 应用程序。
【讨论】:
【参考方案2】:Heroku 情况的解决方案(不是 README 文件):
如果您使用的是新的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 start
时设置端口(从根 github 目录,Procfile 所在的位置)。 Heroku 服务器负责处理测功机上的 .env 文件。最大的优势是您可以通过这种方式在测功机上设置多个进程!
【讨论】:
【参考方案3】:只需覆盖 Rails 的默认 README
文件。没有理由保留它。将其他与项目管理相关的东西放在doc
目录中。虽然您当然有充分的理由希望按照您的方式进行设置,但您违反惯例只会让自己头疼,而且可能不值得这样做。
【讨论】:
【参考方案4】:我会将/my_rails_app
下的所有内容添加到 Heroku git 存储库。然后将 GitHub 添加为远程,并将 /project
下的所有内容添加到 GitHub 存储库。然后,您可以将 Rails 应用程序推送到 Heroku(来自 /my_rails_app
)并将整个项目推送到 GitHub(来自 /project
)。
【讨论】:
您基本上是在说创建两个存储库,对吗?一个在另一个里面?不过不错。但是,我已经尝试过了,但它不起作用:)。 Github 是问题所在:不是将 my_rails_app 显示为普通的版本控制文件夹,而是显示为 git 提交参考的链接(在这种情况下,my_rails_app git repo 的提交 id 的前几个字符)。所以基本上这样做会使 github 的 web 视图对所有意图和目的都毫无用处。 你必须有两个 repos,因为 Heroku 需要它自己的。我已经用 Heroku 和 GitHub 成功地做到了这一点,但没有以这种方式嵌套。看起来正义可能有一个很好的答案。以上是关于Heroku 和 Github 集成(如何构建项目)的主要内容,如果未能解决你的问题,请参考以下文章
如何更新使用 GitHub“部署到 Heroku”按钮创建的 Heroku 应用程序?
如何使用 Hubot 将 Github 存储库部署到 Heroku?