"Creating Site" Fails During "Install Apps" Step in ERPNext Shipping Deployment

Hi everyone,

I’m experiencing an issue while deploying the ERPNext Shipping app on our Frappe Cloud instance. The initial steps, “Initializing” and “Deploying Bench”, complete successfully. However, the process fails during the “Creating Site” phase—specifically at the “Install Apps” step.

Has anyone encountered this problem or have insights into what might be causing the failure during the “Install Apps” step? Any guidance or troubleshooting suggestions would be greatly appreciated.

Thanks in advance for your help!





Installing erpnext_shipping...
Updating DocTypes for erpnext_shipping: [========================================] 100%
An error occurred while installing erpnext_shipping: Could not find DocType: Delivery Note
Traceback with variables (most recent call last):
  File "apps/frappe/frappe/commands/site.py", line 484, in install_app
    _install_app(app, verbose=context.verbose, force=force)
      context = {'sites': ['obfuscate.frappe.cloud'], 'force': False, 'verbose': False, 'profile': False}
      apps = ('erpnext_shipping',)
      force = False
      _install_app = <function install_app at 0x7fede2707060>
      filelock = <function filelock at 0x7fede27042c0>
      exit_code = 0
      site = 'obfuscate.frappe.cloud'
      app = 'erpnext_shipping'
      err = LinkValidationError('Could not find DocType: Delivery Note')
  File "apps/frappe/frappe/installer.py", line 326, in install_app
    frappe.get_attr(after_install)()
      name = 'erpnext_shipping'
      verbose = False
      set_as_patched = True
      force = False
      sync_jobs = <function sync_jobs at 0x7fede168b560>
      sync_for = <function sync_for at 0x7fede169c400>
      sync_customizations = <function sync_customizations at 0x7fede28b0680>
      sync_fixtures = <function sync_fixtures at 0x7fede169c720>
      app_hooks = {'after_install': ['erpnext_shipping.install.after_install'], 'app_color': ['grey'], 'app_description': ['A Shipping Integration fir ERPNext'], 'app_email': ['developers@frappe.io'], 'app_icon': ['octicon octicon-file-directory'], 'app_include_js': ['shipping.bundle.js'], 'app_license': ['MIT'], 'app_name': ['erpnext_shipping'], 'app_publisher': ['Frappe'], 'app_title': ['ERPNext Shipping'], 'app_version': ['15.0.3'], 'doctype_js': {'Shipment': ['public/js/shipment.js']}, 'scheduler_events': {'daily': ['erpnext_shipping.erpnext_shipping.utils.update_tracking_info_daily']}, 'shipping_custom_fields': {'Delivery Note': [{'fieldname': 'shipping_sec_break', 'label': 'Shipping Details', 'fieldtype': 'Section Break', 'collapsible': 1, 'insert_after': 'sales_team'}, {'fieldname': 'delivery_type', 'label': 'Delivery Type', 'fieldtype': 'Data', 'read_only': 1, 'translatable': 0, 'insert_after': 'shipping_sec_break'}, {'fieldname': 'parcel_service', 'label': 'Parcel Service', 'fieldtype': 'Data',...
      installed_apps = ['frappe']
      after_install = 'erpnext_shipping.install.after_install'
  File "apps/erpnext_shipping/erpnext_shipping/install.py", line 7, in after_install
    create_custom_fields(custom_fields)
      custom_fields = {'Delivery Note': [{'fieldname': 'shipping_sec_break', 'label': 'Shipping Details', 'fieldtype': 'Section Break', 'collapsible': 1, 'insert_after': 'sales_team'}, {'fieldname': 'delivery_type', 'label': 'Delivery Type', 'fieldtype': 'Data', 'read_only': 1, 'translatable': 0, 'insert_after': 'shipping_sec_break'}, {'fieldname': 'parcel_service', 'label': 'Parcel Service', 'fieldtype': 'Data', 'options': 'Parcel Service', 'read_only': 1, 'insert_after': 'delivery_type'}, {'fieldname': 'parcel_service_type', 'label': 'Parcel Service Type', 'fieldtype': 'Data', 'options': 'Parcel Service Type', 'read_only': 1, 'insert_after': 'parcel_service'}, {'fieldname': 'shipping_col_break', 'fieldtype': 'Column Break', 'insert_after': 'parcel_service_type'}, {'fieldname': 'tracking_number', 'label': 'Tracking Number', 'fieldtype': 'Data', 'read_only': 1, 'translatable': 0, 'insert_after': 'shipping_col_break'}, {'fieldname': 'tracking_url', 'label': 'Tracking URL', 'fieldtype': 'Small Text', 'read_on...
  File "apps/frappe/frappe/custom/doctype/custom_field/custom_field.py", line 328, in create_custom_fields
    create_custom_field(doctype, df, ignore_validate=ignore_validate)
      custom_fields = {'Delivery Note': [{'fieldname': 'shipping_sec_break', 'label': 'Shipping Details', 'fieldtype': 'Section Break', 'collapsible': 1, 'insert_after': 'sales_team'}, {'fieldname': 'delivery_type', 'label': 'Delivery Type', 'fieldtype': 'Data', 'read_only': 1, 'translatable': 0, 'insert_after': 'shipping_sec_break'}, {'fieldname': 'parcel_service', 'label': 'Parcel Service', 'fieldtype': 'Data', 'options': 'Parcel Service', 'read_only': 1, 'insert_after': 'delivery_type'}, {'fieldname': 'parcel_service_type', 'label': 'Parcel Service Type', 'fieldtype': 'Data', 'options': 'Parcel Service Type', 'read_only': 1, 'insert_after': 'parcel_service'}, {'fieldname': 'shipping_col_break', 'fieldtype': 'Column Break', 'insert_after': 'parcel_service_type'}, {'fieldname': 'tracking_number', 'label': 'Tracking Number', 'fieldtype': 'Data', 'read_only': 1, 'translatable': 0, 'insert_after': 'shipping_col_break'}, {'fieldname': 'tracking_url', 'label': 'Tracking URL', 'fieldtype': 'Small Text', 'read_on...
      ignore_validate = False
      update = True
      doctypes_to_update = {'Delivery Note'}
      doctypes = ('Delivery Note',)
      fields = [{'fieldname': 'shipping_sec_break', 'label': 'Shipping Details', 'fieldtype': 'Section Break', 'collapsible': 1, 'insert_after': 'sales_team'}, {'fieldname': 'delivery_type', 'label': 'Delivery Type', 'fieldtype': 'Data', 'read_only': 1, 'translatable': 0, 'insert_after': 'shipping_sec_break'}, {'fieldname': 'parcel_service', 'label': 'Parcel Service', 'fieldtype': 'Data', 'options': 'Parcel Service', 'read_only': 1, 'insert_after': 'delivery_type'}, {'fieldname': 'parcel_service_type', 'label': 'Parcel Service Type', 'fieldtype': 'Data', 'options': 'Parcel Service Type', 'read_only': 1, 'insert_after': 'parcel_service'}, {'fieldname': 'shipping_col_break', 'fieldtype': 'Column Break', 'insert_after': 'parcel_service_type'}, {'fieldname': 'tracking_number', 'label': 'Tracking Number', 'fieldtype': 'Data', 'read_only': 1, 'translatable': 0, 'insert_after': 'shipping_col_break'}, {'fieldname': 'tracking_url', 'label': 'Tracking URL', 'fieldtype': 'Small Text', 'read_only': 1, 'translata...
      doctype = 'Delivery Note'
      df = {'fieldname': 'shipping_sec_break', 'label': 'Shipping Details', 'fieldtype': 'Section Break', 'collapsible': 1, 'insert_after': 'sales_team', 'owner': 'Administrator'}
      field = None
  File "apps/frappe/frappe/custom/doctype/custom_field/custom_field.py", line 294, in create_custom_field
    custom_field.insert()
      doctype = 'Delivery Note'
      df = {'fieldname': 'shipping_sec_break', 'label': 'Shipping Details', 'fieldtype': 'Section Break', 'collapsible': 1, 'insert_after': 'sales_team', 'owner': 'Administrator'}
      ignore_validate = False
      is_system_generated = True
      custom_field = <CustomField: unsaved>
  File "apps/frappe/frappe/model/document.py", line 287, in insert
    self._validate_links()
      self = <CustomField: unsaved>
      ignore_permissions = None
      ignore_links = None
      ignore_if_duplicate = False
      ignore_mandatory = None
      set_name = None
      set_child_names = True
  File "apps/frappe/frappe/model/document.py", line 942, in _validate_links
    frappe.throw(_("Could not find {0}").format(msg), frappe.LinkValidationError)
      self = <CustomField: unsaved>
      invalid_links = [('dt', 'Delivery Note', 'DocType: Delivery Note')]
      cancelled_links = []
      msg = 'DocType: Delivery Note'
  File "apps/frappe/frappe/__init__.py", line 603, in throw
    msgprint(
      msg = 'Could not find DocType: Delivery Note'
      exc = <class 'frappe.exceptions.LinkValidationError'>
      title = None
      is_minimizable = False
      wide = False
      as_list = False
      primary_action = None
  File "apps/frappe/frappe/__init__.py", line 568, in msgprint
    _raise_exception()
      msg = 'Could not find DocType: Delivery Note'
      title = None
      raise_exception = <class 'frappe.exceptions.LinkValidationError'>
      as_table = False
      as_list = False
      indicator = 'red'
      alert = False
      primary_action = None
      is_minimizable = False
      wide = False
      realtime = False
      sys = <module 'sys' (built-in)>
      _raise_exception = <function msgprint.<locals>._raise_exception at 0x7feddf4abe20>
      inspect = <module 'inspect' from '/usr/lib/python3.11/inspect.py'>
      out = {'message': 'Could not find DocType: Delivery Note', 'title': 'Message', 'indicator': 'red', 'raise_exception': 1, '__frappe_exc_id': '76a76f6dccc490ff137c4a72469e20092eb359fd50dbe2f6282f42fd'}
  File "apps/frappe/frappe/__init__.py", line 519, in _raise_exception
    raise exc
      exc = LinkValidationError('Could not find DocType: Delivery Note')
      inspect = <module 'inspect' from '/usr/lib/python3.11/inspect.py'>
      msg = 'Could not find DocType: Delivery Note'
      out = {'message': 'Could not find DocType: Delivery Note', 'title': 'Message', 'indicator': 'red', 'raise_exception': 1, '__frappe_exc_id': '76a76f6dccc490ff137c4a72469e20092eb359fd50dbe2f6282f42fd'}
      raise_exception = <class 'frappe.exceptions.LinkValidationError'>
frappe.exceptions.LinkValidationError: Could not find DocType: Delivery Note

I might be wrong here, but doesn’t frappe cloud come with ERPNext as default? It seems like the delivery note doctype is not found. Odd. Could you try migrating the site once (and initialising via setup wizard first if you had’nt done that already) before installing this app?