Orchardcms 从试验到生产的果园推广

Orchardcms 从试验到生产的果园推广,orchardcms,orchardcms-1.6,Orchardcms,Orchardcms 1.6,我目前有3个环境: DEV(带VS2012和源代码)-连接到测试数据库 测试-它连接到测试数据库 PROD-它连接到PROD db 该网站目前在开发和测试方面运行良好(已经添加了内容、小部件等) 当我尝试推广到PROD时,网站似乎运行良好(所有页面都在那里,我可以导航,等等)-但是,我根本无法编辑 例如,在添加新页面/编辑内容时,我会出现以下错误: "An unhandled exception has occurred and the request was terminated. Pleas

我目前有3个环境:

  • DEV(带VS2012和源代码)-连接到测试数据库
  • 测试-它连接到测试数据库
  • PROD-它连接到PROD db
  • 该网站目前在开发和测试方面运行良好(已经添加了内容、小部件等)

    当我尝试推广到PROD时,网站似乎运行良好(所有页面都在那里,我可以导航,等等)-但是,我根本无法编辑

    例如,在添加新页面/编辑内容时,我会出现以下错误:

    "An unhandled exception has occurred and the request was terminated. Please refresh the page. If the error persists, go back
    
    could not insert: [Orchard.ContentManagement.Records.ContentItemVersionRecord][SQL:    INSERT INTO Orchard_Framework_ContentItemVersionRecord (Number, Published, Latest, Data, ContentItemRecord_id) VALUES (?, ?, ?, ?, ?); select SCOPE_IDENTITY()]
    
    NHibernate.Exceptions.GenericADOException: could not insert: [Orchard.ContentManagement.Records.ContentItemVersionRecord][SQL: INSERT INTO Orchard_Framework_ContentItemVersionRecord (Number, Published, Latest, Data, ContentItemRecord_id) VALUES (?, ?, ?, ?, ?); select SCOPE_IDENTITY()] ---> System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'Id', table 'Orchard.dbo.Orchard_Framework_ContentItemVersionRecord'; column does not allow nulls. INSERT fails."
    
    另外,当我试图在PROD中禁用形状跟踪模块时,它会说成功,但当我检查它时,它实际上没有禁用该模块

    以下是我将其发布到PROD的方式:

  • 使用Build.cmd“compile;package”在DEV上构建项目
  • 将build\Stage的内容复制到PROD(App_Data文件夹只有_marker.txt文件)
  • 在PROD中创建空白数据库
  • 在PROD中打开网站,要求我输入网站名称、数据库详细信息等
  • 现在,当我打开网站时,它会显示默认的“TheTheThemeMachine”网站,这很好
  • 然后,我将数据库从测试复制到产品(通过SQLServer导出)
  • 现在,当我打开网站时,我的网站运行良好,有所有页面,等等,但当我试图编辑内容或添加新页面时,出现了上述异常

  • 我该怎么做?

    这意味着您的表没有定义正确的标识。由于您在导出和导入时没有获取所有模式信息,因此您可能还缺少很多关于表的元数据。备份/恢复是移动数据库的一种更安全的方法,尽管还有其他方法,因为可以保证在另一端有相同的数据库,即schema+数据。

    关于步骤6,您能更具体一些吗?似乎您遗漏了一些重要的元数据,例如标识列。我使用SQL Server导出数据(在SQL Server中-右键单击数据库-所有任务-导出数据-然后按照向导选择所有表)将所有表从测试复制到PRODRight,而不是备份和还原数据库,这可能不会传输标识,等等。检查您的导出参数。您还可以通过在这些表上查找标识列来验证我的假设是否正确。如果我是对的,您没有。谢谢Bertrand,是的,我可以确认它在PROD中丢失了标识。这是否意味着我的上述步骤是正确的,只要我确保在上面的步骤6中执行备份和恢复,就可以工作?备份和恢复更安全,是的,尽管这不是唯一的方法。我将在下面复制这个答案,因为这似乎是问题所在。