我正在创建一个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.
答案 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
)。