Heroku和Github的集成(如何组织项目)

24

我正在创建一个 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 
在上面的例子中,project对应的是http://github.com/myuser/project,而my_rails_app是应该被推送到Heroku的代码。我是否需要为Rails应用程序创建一个单独的分支,或者有没有更简单的方法我不知道?
我想我的与项目相关的非Rails文件可以放在my_rails_app中,但是Rails README已经在那里了,覆盖它看起来不太一致。但是,如果我留下它,我的Rails应用程序的Github页面将包含Rails README,这没有意义。
另外...我尝试按照上述描述进行设置并运行...
git push heroku

从主项目文件夹中部署。当然,Heroku不知道我想要部署子文件夹:

-----> Heroku receiving push
 !     Heroku push rejected, no Rails or Rack app detected.
4个回答

18

这里有一个简单的解决方案,可能适用于您。

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

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

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


6

针对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读取并用于设置环境变量,以便在您的计算机上执行foreman start时设置端口(从根github目录中,其中Procfile位于此处)。 Heroku服务器负责在dyno上处理.env文件。最大的优势是您可以以这种方式在dyno上设置多个进程!

4

只需覆盖Rails默认的README文件,没有必要保留它。将其他项目管理相关的内容放在doc目录中。虽然您肯定有想要按照自己的方式设置的有效理由,但是您正在违反惯例,这只会给自己带来麻烦,而且可能不值得这样做。


0
我会将位于 /my_rails_app 下的所有内容添加到 Heroku git 仓库中,然后将 GitHub 添加为远程仓库,并将位于 /project 下的所有内容添加到 GitHub 仓库中。然后你就可以从 /my_rails_app 推送 Rails 应用到 Heroku,并从 /project 推送整个项目到 GitHub。

你的意思是创建两个仓库,对吧?一个在另一个里面?这是个好想法。然而,我已经尝试过了,它不起作用:)。Github是问题所在:它不像普通的版本控制文件夹一样显示my_rails_app,而是显示为指向git提交引用的链接(在这种情况下,是my_rails_app git仓库的前几个字符)。因此,基本上这样做使得github的Web视图在所有方面都无用。 - user67416
你需要有两个代码仓库,因为Heroku需要它自己的仓库。我已经成功地在Heroku和GitHub上完成了这个操作,但没有像这样嵌套。看起来Justice可能有一个好的答案。 - John Topley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接