2010-03-16 32 views
24

我正在创建一个web服务,我想将源文件存储在github上并在heroku上运行应用程序。我还没有看到我的确切的情况在任何地方解决的“净为止,所以在这里我要问它:Heroku和Github集成(如何构建项目)

我想有以下目录结构:

/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文件可能存在于my_rails_app中,但是rails README已经存在于那里,覆盖它看起来不一致。但是,如果我离开它,我的rails应用程序的github页面将包含rails自述文件,这没有任何意义。

而且......我尝试了从主项目文件夹设置它如上所述和运行

git push heroku 

。当然,Heroku的不知道我要部署的子文件夹:

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

回答

18

下面是一个简单的解决方案,可能会或可能不适合你。

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

  • 将Rails应用程序项目添加为“容器”项目内的git子模块。

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

+0

这工作,谢谢。 – g33kz0r 2010-03-16 14:56:55

0

我想下面/my_rails_app添加一切Heroku的git仓库。然后将GitHub添加为远程并将/project下的所有内容添加到GitHub存储库。然后,您可以将Rails应用程序推送到Heroku(从/my_rails_app),并将完整项目推送到GitHub(从/project)。

+0

你基本上是说创建两个回购,对吧?一个在另一个里面?虽然好。但是,我已经尝试过了,它不起作用:)。 Github的问题在于:不是将my_rails_app显示为普通的受版本控制的文件夹,而是显示为git提交引用的链接(本例中为my_rails_app git repo的提交id的前几个字符)。所以基本上这样做使得github的web视图对于所有的意图和目的都没有用处。 – g33kz0r 2010-03-16 13:56:11

+0

因为Heroku需要它自己,所以你必须有两个回购。我已经用Heroku和GitHub成功完成了这个任务,但没有这样嵌套。看起来正义可能有一个很好的答案。 – 2010-03-16 14:00:13

4

只是覆盖Rails的默认README文件。没有理由保留它。把你的其他项目管理相关的东西放在doc目录中。虽然你肯定有正当的理由想要按照你的方式来设置它,但你违背惯例就会让自己头疼,这可能不值得。

6

一种Heroku的情况(不README文件)的解决方案:

如果您正在使用新的Heroku Cedar(我相信这是不可用,当你第一次问你的问题),那么你的流程(如导轨服务器进程)使用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服务器负责维护您的dyno上的.env文件。最大的好处是你可以用这种方式在测功机上设置多个进程!