24

我正在创建一个网络服务,我想将源存储在 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.
4

4 回答 4

18

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

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

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

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

于 2010-03-16T13:44:39.727 回答
6

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

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

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 文件。最大的优势是您可以通过这种方式在测功机上设置多个进程!

于 2011-09-16T13:40:41.593 回答
4

只需覆盖 Rails 的默认README文件。没有理由保留它。将其他与项目管理相关的东西放在doc目录中。虽然您当然有充分的理由想要按照您的方式进行设置,但您违反惯例只会让自己头疼,而且可能不值得这样做。

于 2011-04-12T18:46:50.170 回答
0

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

于 2010-03-16T13:36:27.127 回答