我的基本问题是:如果我重复复制Rails应用程序,那么同一回购协议有很多代(即,Rails应用程序的目录和文件的各种迭代),我需要怎么做才能确保服务器运行正常并避免出现重大问题?
我正在写a learning app,可以使用户深入了解编程任务。目前,它仅支持单文件任务。接下来,我要添加对多文件任务的支持,涉及HTML / CSS / JS和Rails任务(例如,“添加执行某某功能的模型”或“为某某功能添加Minitest测试” )。将要求用户直接编辑Rails代码,然后我的应用程序将自动运行服务器并显示结果。回答完每个问题后(即执行了每个任务),我的应用程序将根据需要自动向下迁移数据库并从tarball重新复制存储库-基本上是为用户下次处理任务做好准备。 (嗯,我希望这是个好主意。)
由于Rails应用程序是如此庞大和复杂,因此为每个问题构建和添加单独的Rails应用程序当然是不可行的。取而代之的是,我将有很多问题/任务都基于同一存储库(安装)。回答完每个问题后(即执行了每个任务),数据库将根据需要向下迁移,并从tarball重新复制回购协议。到目前为止,一切都很好? (我预计使用Git执行此操作会遇到问题...所以我只使用Minitar。)
但是,当我提出其他问题集时,我当然必须制作同一版本的其他版本(使用相同的数据库,或者使用副本)。例如,我可能想要一堆与在Rails中使用AJAX相关的问题/任务,为此,我需要以各种方式准备安装。但是,如果我只是在具有自己任务的先前回购的副本上构建,那么复制过程会为以后的回购及其任务带来问题吗?
我已经做了一些测试。我已经确认,如果我只执行cp -r repo1/ repo2/
然后在rails s
中运行repo2
,则后者的服务器将正常启动。尽管用repo2
编写的数据没有出现在repo1
中,但我不能创建一个同名的模型(这有点令人困惑)。我想这可能是一些问题的问题-也就是说,即使更高版本的数据库基于早期版本,我也不希望它们针对所有存储库从同一数据库运行。因此,每当我复制存储库时,我都想复制数据库as explained here。听起来不错吗?
构建此功能是否需要做其他事情,以防止与重复复制同一存储库(和数据库)的不同迭代有关的问题?
答案 0 :(得分:3)
我认为您正在使它变得比所需的更加复杂。这可以通过利用git功能分支在git中完成,例如问题1,问题2,用于每个推导,并将其与rails rake数据库任务结合起来,例如耙db:drop,耙db:create,耙 db:migrate,耙db:seed,以确保为每个分支正确引导数据库。
另一种方法是将最终数据库状态的SQL转储添加到每个功能分支,并通过rake任务加载它们以将数据库引导到所需状态。