天道酬勤,学无止境

在两个 Rails 项目之间共享模型 - 使用 git 子模块?(Sharing Models between two Rails Projects - using git submodules?)

问题

我有一个 Rails 网站,它被分为两个独立的项目——公共网站和管理网站。

由于两个站点都使用相同的数据库,因此应用程序之间共享模型(实际上现在它们是重复的)。 我在这里遇到的问题是,当公共项目中发生模型更新时,我需要将更改复制到管理项目中。

我环顾四周,注意到有一个问题的答案建议使用 svn:external 或 git submodule,但我不完全确定如何执行此操作。

本质上,我的目标是能够仅在一个地方进行更改,将这些更改提交到git ,然后在我需要更新时也能够在另一个项目中提取更改。

回答1

你需要:

  • 在一处提交子模块
  • 提交主项目(表示公共站点)
  • 转到另一个主项目(管理站点)中的同一个子模块
  • 拉取最新内容(更改该子模块的 HEAD)
  • 在主(管理)项目中向上移动一个目录
  • 提交(记录您现在引用了子模块的不同版本)

另请参阅子模块的真实性质

回答2

不要使用子模块。 它们丑陋,难以理解和维护。 更好的是使用子树。

Git subtree 从 1.7.11 开始成为 GIT 的一部分,我写了一篇关于在 Rails 应用程序之间共享代码的文章:http://igor-alexandrov.github.com/blog/2013/03/28/using-git-subtree-to -共享代码-rails-applications/

简而言之:是的 git-subtree 工作并且工作得很好!

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在两个或多个 Rails 应用程序之间共享代码……git 子模块的替代方案?(Sharing code between two or more rails apps… alternatives to git submodules?)
    问题 我们有两个单独的 rails_app, foo/和bar/ (分开是有充分理由的)。 它们都依赖于common/文件夹中的某些模型等,当前与foo和bar平行。 我们当前的 svn 设置使用svn:externals来共享common/ 。 这个周末我们想尝试一下 git。 经过大量研究,似乎解决此问题的“犹太洁食”方法是使用git submodule 。 我们在将foo 、 bar 、 common分离到单独的存储库后开始工作,但随后实现了所有附加的字符串: 在提交父模块之前总是提交子模块。 在推送父模块之前总是推送子模块。 在提交之前确保子模块的 HEAD 指向一个分支。 (如果您是 bash 用户,我建议您使用 git-completion 将当前分支名称放在您的提示中。) 在切换分支或拉取更改后始终运行“git submodule update”。 所有这些问题比add 、 commit 、 push更复杂。 我们正在寻找更简单的方法来共享 git 中的common 。 这家伙似乎在使用 git subtree 扩展方面取得了成功,但这与标准 git 的不同并且看起来仍然不那么简单。 鉴于我们的项目结构,这是我们能做的最好的事情吗? 我对 Rails 插件/引擎的了解还不够多,但这似乎是一种可能的 RoR 式共享库方式。 提前致谢。 回答1 我认为 git
  • 在节点应用程序之间共享代码(Sharing code between Node applications)
    问题 我们的应用程序包含两个组件:API和客户端。 两者都是独立的Node应用程序。 尽管该API除了文档之外实际上没有任何前端组件,但它们仍然共享一些通用文件,例如Jade组件,规范化CSS,实用程序模块,以及最重要的是Mongoose用于MongoDB交互的模式和模型定义。 我真的不希望习惯于先对API进行更改,然后将更改的文件复制到客户端(反之亦然)的工作流,因此,为此找到一个可行的解决方案将是非常不错的。 在Node应用程序之间共享各种代码的最佳方法是什么? 在浏览Web时,我遇到了几种解决方案,但是在这种情况下,它们都不起作用。 一种解决方案是使节点模块脱离通用文件,并使用NPM使它们在应用程序之间保持同步,但这意味着我(以及未来的开发人员)必须知道哪些文件是通用模块的一部分,并需要它们。例如,使用require('node_modules/mongo/schemas/example.js')而不是require('mongo/schemas/example.js') 。 由于假设可能存在数百个公用文件,因此将无法记住某个文件是否公用,尤其是对于新开发人员而言。 另一个解决方案是制作common模块的git子模块。 如果我只能将子模块路径包括到Node的require路径中,那么这将是完美的,因此,如果在预期位置(例如mongo/schemas/example.js
  • 在 Heroku 应用程序之间共享 Python 代码(Sharing Python code between Heroku apps)
    问题 我有 2 个 Heroku 应用程序,都是 Pyhon,还有一些在它们之间共享的 Python 模块(即:它们在两个应用程序中是相同的)。 设置我的 git/requirements.txt 以实现以下目标的最佳方法是什么? 共享代码是版本化的(也就是说:它也位于 Git 中,我不在乎在哪里——其中一个项目?另一个项目?) 在开发中,我的磁盘上有该共享代码的单个副本在开发中,我可以更改共享代码的单个副本,并将更改反映在两个应用程序中,理想情况下,除了更改磁盘上的文件外,无需执行任何其他操作。 当推送到 Heroku 时,我所做的只是一个简单的“推送” 我的直觉告诉我,我需要将共享代码作为 Python 包放在磁盘上,并在开发中将其添加到每个应用程序的 PYTHONPATH。 此外,我会将它(如何?使用私人服务器?从 s3?作为供应商目录?)添加到每个应用程序的 requriments.txt。 ......但我不能完全确定它。 有什么想法吗? 回答1 您可以使用pip要求文件来做到这一点。 您可能有一个用于本地开发,另一个用于您的应用程序。 请查看需求文件格式以获取更多信息。 本地开发需求文件 file:///path/to/your/lib/project#egg=MyProject 这应该给你从你的应用程序的只读访问,这对共享代码很有用(例如项目的git clone )。
  • 在微服务之间共享代码和模式(Sharing code and schema between microservices)
    问题 如果你在你的组织中使用微服务架构,他们可以通过 zookeeper 或其等效物共享配置。 但是,各种服务应该如何共享一个公共数据库架构? 常用常数? 和公用事业? 一种方法是将所有微服务放在同一个代码存储库中,但这与微服务带来的解耦相矛盾…… 另一种方法是让每个微服务完全独立,但这会导致每个微服务必须保存的单独数据库中的代码重复和数据重复。 另一种方法是在没有上下文\状态的情况下实现功能性微服务,但这通常是不现实的,并且会推动架构拥有一个中央集线器来维护上下文\状态和来自\到它的大量流量。 什么是在微服务之间共享代码和模式的可扩展、高效、实用且有希望的美丽方式? 回答1 关于通用代码,最好的做法是使用打包系统。 因此,如果您使用 Java,则使用 maven,如果您使用 Ruby,则使用 Gems,如果使用 python,则使用 pypi 等。理想情况下,打包系统几乎不会增加摩擦,因此您可能有一个(例如 git)存储库用于公共库(或几个公共库不同主题的库)并通过工件存储库(例如私有 maven/gems/pypi)发布他们的工件。 然后在微服务中添加对所需库的依赖。因此代码重用很容易。 在某些情况下,打包系统确实会增加一些摩擦(maven),因此人们可能更喜欢使用单个 git repo 来处理所有内容和多模块项目设置。 这不像第一种方法那么干净,但效果很好,而且还不错。
  • Visual Studio:如何管理项目之间共享的代码(Visual Studio : How to manage code shared between projects)
    问题 这可能之前已经发布过,但我不确定要查找什么搜索词! 快速解释。 我有几个项目之间共享的代码。 此代码本身仍在进行中。 问题是,每当我需要更新此代码时,我都不想这样做 3 次,这将成为一场噩梦。 有没有办法将它添加到项目中,而无需将其复制到项目文件夹中? 即我希望共享类链接到我的 3 个项目中 C:\code repository\sharedclass.cs 不是 \eachproject\bin\sharedclass.cs 我必须将它创建为它自己的库项目吗? 如果编译器可以将其编译为“外部”代码,那就更好了。 干杯。 回答1 最好将公共部分提取到单独的项目库中,并将该项目的引用添加到所有解决方案/依赖项目中。 否则,您可以将代码/文件/项目添加为链接。 回答2 正如其他人所说,您只需在解决方案资源管理器中右键单击您的解决方案,选择添加 > 现有项目,然后浏览到公共项目的 .csproj 文件,它将从其原始位置包含在解决方案中。 但是,这有两个问题,这可能是也可能不是问题,具体取决于您的团队规模: 公共项目将包含在每个解决方案中,并带有解决方案文件的相对路径(即:...\CommonProject\Common.csproj)。 这意味着所有开发人员都必须具有相同的工作文件结构,否则在尝试打开主项目时会出错。 在公共项目被多个项目(例如两个 - A 和 B)引用并且在项目
  • 基于神经网络的实体识别和关系抽取联合学习
    基于神经网络的实体识别和关系抽取联合学习 联合学习(Joint Learning)一词并不是一个最近才出现的术语,在自然语言处理领域,很早就有研究者使用基于传统机器学习的联合模型(Joint Model)来对一些有着密切联系的自然语言处理任务进行联合学习。例如实体识别和实体标准化联合学习,分词和词性标注联合学习等等。最近,研究者们在基于神经网络方法上进行实体识别和关系抽取联合学习,我阅读了一些相关工作,在此和大家一起分享学习。(本文中引用了一些论文作者Suncong Zheng的PPT报告)1 引言 本文关注的任务是从无结构的文本中抽取实体以及实体之间的关系(实体1-关系-实体2,三元组),这里的关系是我们预定义好的关系类型。例如下图, 目前有两大类方法,一种是使用流水线的方法(Pipelined Method)进行抽取:输入一个句子,首先进行命名实体识别,然后对识别出来的实体进行两两组合,再进行关系分类,最后把存在实体关系的三元组作为输入。流水线的方法存在的缺点有:1)错误传播,实体识别模块的错误会影响到下面的关系分类性能;2)忽视了两个子任务之间存在的关系,例如图中的例子,如果存在Country-President关系,那么我们可以知道前一个实体必然属于Location类型,后一个实体属于Person类型,流水线的方法没法利用这样的信息。3)产生了没必要的冗余信息
  • 如何在 2 个应用程序之间共享猫鼬模型?(How can I share mongoose models between 2 apps?)
    问题 我有 2 个应用程序,每个应用程序都在不同的文件夹中,它们需要共享相同的模型。 我想将模型文件夹从应用程序 A 符号链接到应用程序 B 中的模型文件夹。 我遇到的问题是,一旦您在应用程序 A 中调用 mongoose.model('Model', Schema),它们就会“绑定”到该应用程序的 mongoose/mongodb 连接。 有没有人有任何关于最佳管理方法的提示? 回答1 您已经通过使用这样的操作来共享您的猫鼬实例 var mongoose = require('mongoose'); module.exports.mongoose = mongoose; var user = require('./lib/user'); 现在在“lib/user.js”里面 var mongoose = module.parent.mongoose; var model = mongoose.model('User', new mongoose.Schema({ ... }); module.exports = model; 所以这样做你可以在其他应用程序中要求“lib/user.js” 回答2 我最终在这里做的是在 app2 中将 app1 作为子模块(使用 Git)导入。 通过这种方式,模型可以正常导入并绑定到应用程序的默认mongoose连接。 回答3 我共享
  • 构建“大型”Rails 应用程序的最佳实践(Best practice for structuring a 'large' Rails app)
    问题 我的问题是寻求最佳实践、一般建议和见解,而不是针对特定问题的解决方案。 我正处于规划一个我认为相当大的 Rails 项目的早期阶段。 在最简单的层面上,它为目标用户提供了一个千篇一律的 CMS。 所以用户注册并选择一个子域,并获得一个带有 CMS 的非常基本的网站。 因此,整个应用程序大约有 4 个不同的“方面”: 向最终用户销售产品的销售网站 - www.myapp.com 员工可以登录和管理帐户等的中央管理区域 - www.myapp.com/superadmin 用户自己的网站 - subdomain.myapp.com 用户的管理区域/CMS - subdomain.myapp.com/admin 所以我真正要寻找的是构建应用程序的最佳实践。 即应该将其全部合并到一个巨大的应用程序中,还是应该将其拆分为 2 个(或更多)较小的应用程序? 如果部署为一个应用程序,我可以看到有关路由的问题,因为销售网站和用户的网站都需要一个根路径集,而且我不希望我为销售网站设置的路由可以通过用户的网站访问。 在 Rails 或 Apache 级别(mod 重写?)可以做任何事情以确保不会混淆路由吗? 如果拆分为 2 个或更多应用程序,您如何让这些应用程序共享同一个数据库? 这甚至是个好主意吗? 拆分应用程序是否有任何好处(例如隔离应用程序某个区域的问题,而不是将所有内容都关闭)?
  • 从 svn 迁移到 git。 哪个选项最好:巨型树干、子模块、子树(Migration from svn to git. Which option is the best: giant trunk, submodules, subtrees)
    问题 我知道关于同一件事有很多问题,但我仍然需要更多信息。 我正在研究将我们的 SVN 存储库迁移到 git 的可能性,并试图了解哪种方法(单体主干、子模块、子树等)最适合我们的存储库。 以下是有关我们的项目和 SVN 存储库的一些信息: 项目是java web application,打包是war。 它是模块化应用程序。 每个模块由单独的团队开发,然后打包为 jar。 战争取决于这个罐子。 基本上我们的结构看起来像: repo |-application(war) |-module1 (for example, ui stuff) |--module1Submodule1 |--module1Submodule2 |-module2 (for example, database access stuff) |-... 每个模块都有自己的标签和分支。 我的本地机器上的 svn repo 大小与所有分支、标签等是: 超过 250 万个文件超过 20Gb 的空间有 311615 个修订文件主要是源代码,没有大的二进制对象 典型用例: 整个团队 200 多名开发和质量检查不同的团队致力于他们的模块/子模块。 (这是否是单体 git repo 的问题,因为 git 需要在推送之前拉取所有更改,svn 仅警告过时的更改) 分支模块分行申请 未来用例: 格里特开发人员提交,提交被审查
  • 如何将相关应用程序组织到 git repo 中?(How to Organize related applications into git repo's?)
    问题 知道何时将一组相关和/或内聚应用程序拆分为 git repo 和/或分支的决策树是什么? 我应该将每个应用程序保存在一个仓库中吗? 或者所有应用程序和依赖项都在一个仓库中? 或者介于两者之间? 回答 我应该如何使用 git 组织多个相关的应用程序? 声称每个项目的存储库是合适的,但没有提供关于项目是什么的线索。 当 git repo 被拆分时,还有开发、测试、集成测试和生产检出的问题。 回答如何组织您的编程工作列出了一些分支/标签选项,但忽略了多应用程序的详细信息。 还有数据库模式! 模式的增量定义有帮助,但同样,如果数据库跨越后端和前端应用程序,那么这个定义会保存在哪里? 我一直在思考的一些例子: 一个前端 Web 应用程序和它的后端 CGI/DB:一个或两个 repo? 一组使用其他后端功能的 Web 后端一组共享 CSS 和 jquery 插件的前端应用程序跨依赖代码测试前端功能的 selenium 脚本 - 在前端应用程序存储库或依赖代码存储库中? 如果我想在单个应用程序上工作,则很难(好吧,乏味且容易出错)检查存储库的目录,因此我必须检查整个 git 树(或至少克隆整个树),所以这意味着 git 并不是真正为将所有应用程序和依赖项保存在单个树中而构建的。 但是如果我想将每个项目(应用程序、框架、依赖项、文档树、CSS)保存在它自己的仓库中
  • Android Studio 中的代码共享(Code sharing in Android Studio)
    问题 我已经开始从事一个项目,我需要在多个应用程序之间共享一堆Java类。 在Eclipse ,可以使用所有这些类创建一个项目,并将其用作包含所有依赖项目的工作区中的库,但在Android Studio中似乎不可能这样做(至少不容易)。 我一直在阅读一堆帖子,其中很多建议设置一个库项目,生成一个aar文件,然后在我的项目中使用它。 但是,据我所知,这将使我的库成为开源(我说得对吗?),这是我不想要的。 我正在为客户做这件事,我希望代码库是私有的。 另外,我知道可以将模块导入到新项目中。 但这会创建原始模块的副本。 这根本不是我想要的。 我不想维护相同类的多个副本,这完全违背了“代码共享”的目的。 有什么好的方法可以实现我正在寻找的东西吗? 任何帮助表示赞赏。 回答1 您有几个不同的选择。 一种选择是将您的库作为单独的项目进行维护,并将它们编译为归档格式,例如 JAR 或 AAR; JAR 文件用于纯 Java 库,AAR 用于 Android 库(包含访问 Android API 和/或具有 Android 资源的代码)。 正如评论中指出的那样,AAR 不会像 JAR 文件那样强迫您向世界发布您的代码; 它只是一种存档文件格式,其文件可以是您的机器或组织的本地文件。 有了该存档文件,您就可以将其包含在其他项目中。 如果您是多开发者组织的一部分
  • 如何将我的 svn:externals 策略调整为 git 子模块?(How do I adapt my svn:externals strategy to git submodules?)
    问题 我在弄清楚如何将我的心态转变为 git 时遇到了麻烦,并且遇到了以下问题。 我的情况是,我们有一个共享引擎和多个使用该引擎的项目。 内部开发团队和第二方团队可能正在从事使用共享引擎的项目,并希望在开发过程中尽可能多地使用共享引擎的 HEAD,直到发布前几周,共享引擎将被标记并分支,然后项目将使用该分支。 项目团队通常一次只处理一个项目,但可能会在调试期间更改共享引擎或添加功能。 当他们提交这些更改时,我们的构建系统会运行以查找他们在提交时可能引入的任何问题。 我(认为我)想在新项目/新公司中使用相同的模型。 在 svn 中,结构是这样的:shared_engine project_in_dev-+ +- svn:external shared_engine:head project_about_to_ship-+ +-svn:external shared_engine_rev1_branch 这非常有效: 项目开发人员可以执行一个命令来检查他们需要的所有依赖项项目开发人员可以轻松完成引擎工作并提交到共享引擎我们可以轻松地使用外部和修订版本来修改或更改项目使用的共享引擎引擎更新很容易通过您的每日“从根项目更新”获得 好的,现在我已经转移到 git,并且子模块似乎是处理外部代码的新方法,但似乎我失去了一些功能。 实际获取项目的所有依赖项是一个多步骤的过程。
  • 骨干项目组织(Backbone project organization)
    问题 我正在努力提出一种干净,可靠的方式来组织Backbone应用程序。 我正在使用Requirejs,Handlebars和Requirejs Text插件来动态加载HTML视图。 为了简化起见,我们只说该站点具有以下页面: 主页:显示产品集合 关于:静态页面 帐户:包含帐户信息。 购买的产品允许进行各种更新。 很多功能。 有选项卡可导航到不同部分。 所以我要去一个SPA,将新页面加载到div('.backbone-view')中。 我是否应该拥有带有el:$('。backbone-view')的常规AppView,当路线更改然后加载适当的模板时会调用该AppView? 还是我应该为每个页面(homeView,aboutView,accountView)都拥有一个将其el设置为骨干视图的视图? 除此之外...除了产品之外,我还需要其他任何产品的模型吗? 对于静态About页面,我只加载了html模板,仅此而已。 但是对于产品,我需要调用产品集合,该集合将呈现每个产品视图,每个视图都与一个产品模型相关联。 很好...但是我应该在哪里初始化这些产品构造? 当我转到首页时,该在那儿做吗? 我有这个伪代码: routes: { '': 'home', 'about': 'about', 'my-account': 'myAccount', '*default': 'home' },
  • Git:可以在多个项目中使用相同的子模块工作副本吗?(Git: Possible to use same submodule working copy by multiple projects?)
    问题 我是Git的新手。 可以说,我有两个git存储库,它们添加了与子模块相同的库: /home/projects/project1/library_XYZ /home/projects/project2/library_XYZ 还可以说,我正在同时处理项目和库。 当我对库进行更改时,在/home/projects/project1/library_XYZ ,我将不得不推送这些更改,然后将其拉入/home/projects/project2/library_XYZ以使它们可用于project2 ,对吗? 我认为这很不方便,原因有二: 我将不得不两次构建library_XYZ 。 我有一个多余的冗余,与实际的项目组织相矛盾。 有什么方法可以使Git将子模块library_XYZ克隆到相同的本地目录中,即使文件像这样组织 /home/projects/project1 /home/projects/project2 /home/projects/library_XYZ 而library_XYZ仍然是两个项目的子模块? 我认为这可能与此有关,尽管我的设置有些不同,但仍未得到解决。 回答1 将共享依赖项设置为子模块很容易。 git submodule命令不会自动执行此操作,但是子模块只不过是一个嵌套的存储库-git不需要任何实际的存储库或其工作树位于任何特定的位置。
  • 在多个 NPM 包之间共享一个 Mongoose 实例(Sharing a Mongoose instance between multiple NPM packages)
    问题 为了将现有的大型 Node+Express+Mongoose 应用程序模块化为多个可挂载应用程序,每个应用程序开发为单独的 NPM 包,我们想知道在它们之间共享单个 Mongoose 实例是否是个好主意? 假设我们有一套 NPM 包,每个包都包含客户端资产、Mongoose 模型和一个用 Express 实现的 REST-API。 它们确实有一些共同的特征,但本质上被视为单独的可重复使用的人工制品。 主机应用程序,也是基于 Express 的,将这些安装在各种根 URI 下: var discussions = require('discussions'), tickets = require('tickets'), events = require('events'), express = require('express'), app = express(); var environment = { ...see below... }; ... app.use('/events-api', events(environment)); app.use('/tickets-api', tickets(environment)); app.use('/discussions-api', discussions(environment)); 现在,由于events 、
  • 如何使用angularJS在多个项目之间共享代码(How to share code between multiple projects with angularJS)
    问题 我想知道在多个 angularJS 项目之间共享公共库和自己的模块的最佳实践是什么。 让我们假设我正在从事两个不同的项目。 两者都依赖于 angularJS、bootstrap 等库。 我有一个像下面这样的文件结构: 项目一索引.html css js 模块A 模块B 库有角的引导程序项目二索引.html css js 模块B 模块 X 库有角的引导程序 所以我正在考虑创建另一个包含所有共享组件的目录,以便我获得 sth。 喜欢: 共享有角的引导程序模块B 项目一索引.html css js 模块A 项目二索引.html css js 模块 X 我有模块 B 写成: angular.module("moduleB", []) .service("SB", [function () {/*functionality here*/}]); .factory("FB", [function () {/*functionality here*/}]); 然后将其作为依赖项包含在我的项目 1/2 中,例如: angular.module("project1", ["moduleB"]); 来实现这种方法。 那会是最好的方法吗? 什么是替代方案? 回答1 您可以这样做,但是如果您希望项目 1 和项目 2 使用共享组件的两个不同版本,这可能会让您头疼。 假设您需要使用最新的共享组件发布项目
  • 高度耦合的git子模块(Highly coupled git submodules)
    问题 我有一个项目,需要将其划分为两个存储库:一组通用模型,以及基于这些模型的模拟以及附加代码。 最终,可能会使用同一组模型进行多次仿真,因此将它们放在单独的存储库中是绝对必要的。 显而易见的解决方案是将通用模型作为仿真的子模块。 不幸的是,这两个库的工作将非常高度耦合。 人们会经常将一些东西添加到他们的通用模型中,然后立即在模拟中使用它。 我想这将在模拟回购的集成过程中带来很多麻烦。 为了在仿真中合并许多开发人员的更改,集成商将必须在通用模型子模块中进行并行合并。 另一方面,使用子模块也很重要-仿真确实需要知道应该使用哪个版本的通用模型。 该项目由大量人员参与。 大多数开发人员对git的了解只是很粗略的:他们添加文件,提交和从源中提取很多东西,并希望有一个dev和稳定的分支。 集成商自然已经学到了很多东西,但是涉及子模块的任何事情对他来说当然都是新的。 额外的好处:我要休假一个月,所以我将无法灭火。 结果是,有很多诱因使工作流程真正难以搞砸,并尽量减少与人们以前的工作流程的差异。 所以,我的问题是:我会后悔建议我们为此使用子模块吗? (有更好的主意吗?)我可以期望人们犯什么样的错误,以便我可以提前警告他们? 有什么好的工作流程策略要牢记吗? 编辑:我刚遇到git slave,在这种情况下也可能值得一看。 目前尚无法对网站上的能力/局限性做出很好的评估。 回答1
  • 在Flask和其他应用之间共享sqlalchemy模型(Share sqlalchemy models between flask and other apps)
    问题 我有一个正在运行的Flask应用程序,该应用程序是根据我们在网上和Miguel Grinberg的“ Flask Web开发”书中找到的最佳实践组合而设置的。 现在,我们需要第二个Python应用程序,它不是Web应用程序,并且需要访问与Flask应用程序相同的模型。 我们想重复使用相同的课程模型,因此两个应用程序都可以从共享代码中受益。 我们已经删除了关于flask-sqlalchemy扩展的依赖关系(之前只有Flask应用程序时使用过)。 并将其替换为此处描述的SQLalchemy声明性扩展,这有点简单(Flask-SQLalchemy向标准SQLAlchemy添加了一些特定的东西) 与示例一致,我们在根目录中创建了一个database.py文件。 在我们的例子中,与声明式扩展示例有两点不同:我将引擎和会话放在一个类中,因为我们所有的模型都使用db.session而不是db_session,并且我将带有配置值的字典传递给init( ) ,这样我就可以使用不同的配置在Flask和其他应用程序中重复使用此database.py。 它看起来像这样: from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker from sqlalchemy.ext
  • 在非 JAR Maven 项目之间共享公共资源(Sharing common resources between non-JAR maven projects)
    问题 我有几个 Maven 项目,比如a , b , c ,从单个父级继承(我们称之为parent ),并且也是模块(与parent不同的项目,我们称之为super )。 这些项目都有一个pom包装。 这些项目中的每一个都有特定的配置,但它们也有一个共同的部分。 更具体地说,每个项目有两个 JMeter 测试配置文件:一个专门用于给定项目,另一个是所有项目通用且相同的。 问题是 - 我应该如何配置 POM 以便在项目之间共享这个通用配置文件? 一种解决方法是将所有这些合并到super ,并使用配置文件。 但是,在这种情况下,我必须手动为每个配置单独构建(而现在我只能构建super )。 有类似的问题,比如这个,但是他们处理的是jar插件,这与这种情况无关。 结构,供参考: POM 继承: parent | ------------- | | | abc 文件结构: super | |-a | |-b | |-c 回答1 我已将 maven-remote-resources-plugin 用于类似目的。 创建一个单独的 jar 类型的资源项目 (com.company:resourceProj)。 将 JMeter 资源文件放在/src/main/resources 。 /src/main/resources/common.properties (your filenames
  • 单个文件作为 Git 子模块(Single file as Git submodule)
    问题 我正在尝试确定 Git 存储库之间共享代码的最佳实践。 到目前为止,我显然遇到了子模块,它们似乎 - 几乎 - 符合要求。 我的项目是一个结构简单的 PHP MVC 框架: /应用程序核心文件 /核 其中app是包含特定于应用程序的控制器、模型、视图等的文件夹,而core包含一般用途的那些,例如登录控制器。 core.php文件本身是所有请求的全局处理程序。 因此,我在这个 MVC 框架的所有部署中共享的代码是core.php和core 。 我可以看到如何将core变成 Git 子模块,而不是core.php 。 这甚至可能吗? 我是否需要重新构建我的框架,以便core.php驻留在core文件夹中,以便我可以使整个文件夹成为子模块,还是有更好的方法? 回答1 也许你最好在一个单独的 repo 中维护 core.php 和 core,然后将它用作远程。 然后您可以通过将其拉入任何使用它的项目来管理它。 为此,只需将新项目作为单独的 git 存储库启动,然后将“核心”存储库作为子树引入。 本章将向您展示如何执行此操作: 更新参考:http://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_subtree_merge 原始参考:https://git-scm.com/book/en/v1/Git-Tools -子树合并