CouchDB
  1. CouchDB
  2. COUCHDB-1046

support load of external erlang modules in couchdb.

    Details

    • Type: New Feature New Feature
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: Database Core
    • Labels:
      None
    • Skill Level:
      Regular Contributors Level (Easy to Medium)

      Description

      If you want to add external modules in CouchDB and load them , you need to set the ERL_FLAGS environnement variable to the path of a module.

      The attached patch allows couchdb to load plugins from plugin key in couchdb section. It add needed path to the code path, so the vm can find modules.

      ex:
      [couchdb]
      plugins = plugin1, plugin2

      Each plugin can have its own section where it set the binaries patch, eventually if a service need to be added to the supervision you can set the module and function to load like in daemon section and tel if it's a supervisor or simple service.

      It also allows couchdb to load a plugin service (gen_server or such) to the supervision. You can choose if the service is a simple daemon or a supervisor.

      ex:
      [plugin1]
      code_path = /path/to/plugin1/ebin
      daemon =

      {module, function, [Args]}

      supervisor = false

      Let me know what you think about it. This patch is really useful here and allows me to dynamically load modules I want. Also it eases the integration of external module. For ex I can load my couchapp_ng modules with this lines in local.ini :

      [couchdb]
      plugins = couchapp-ng

      [couchapp-ng]
      code_path=/Users/benoitc/work/couchapp_ng/ebin
      daemon =

      {couchapp_ng_routes, start_link, []}

      [httpd_design_handlers]
      _app =

      {couchapp_ng_httpd, handle_app_req}

      [couchapp_ng_handlers]
      rewrite =

      {couchapp_ng_handlers, rewrite_handler}

      proxy =

      {couchapp_ng_handlers, proxy_handler}

      and can do the same with geocouch etc. Tested here with these modules.

      1. couchdb-plugins-02.patch
        4 kB
        Benoit Chesneau
      2. couchdb-plugins-01.patch
        3 kB
        Benoit Chesneau
      3. couchdb-plugins-005.patch
        8 kB
        Benoit Chesneau
      4. couchdb-plugins-004.patch
        7 kB
        Benoit Chesneau
      5. couchdb-plugins-003.patch
        7 kB
        Benoit Chesneau

        Activity

        Jan Lehnardt made changes -
        Fix Version/s 1.3 [ 12318350 ]
        Jan Lehnardt made changes -
        Fix Version/s 1.3 [ 12318350 ]
        Fix Version/s 1.2 [ 12315198 ]
        Benoit Chesneau made changes -
        Attachment couchdb-plugins-005.patch [ 12469607 ]
        Benoit Chesneau made changes -
        Attachment couchdb-plugins-004.patch [ 12469593 ]
        Benoit Chesneau made changes -
        Attachment couchdb-plugins-004.patch [ 12469592 ]
        Benoit Chesneau made changes -
        Attachment couchdb-plugins-004.patch [ 12469592 ]
        Benoit Chesneau made changes -
        Attachment couchdb-plugins-003.patch [ 12469589 ]
        Benoit Chesneau made changes -
        Attachment couchdb-plugins-02.patch [ 12469566 ]
        Benoit Chesneau made changes -
        Attachment couchdb-plugins.patch [ 12469558 ]
        Benoit Chesneau made changes -
        Attachment couchdb-plugins-01.patch [ 12469559 ]
        Benoit Chesneau made changes -
        Description     [couchdb]
            plugins = couchapp-ng

            [couchapp-ng]
            code_path=/Users/benoitc/work/couchapp_ng/ebin
            daemon = {couchapp_ng_routes, start_link, []}


            [httpd_design_handlers]
            _app = {couchapp_ng_httpd, handle_app_req}

            [couchapp_ng_handlers]
            rewrite = {couchapp_ng_handlers, rewrite_handler}
            proxy = {couchapp_ng_handlers, proxy_handler}

        and can do the same with geocouch etc. Tested here with these modules.

        If you want to add external modules in CouchDB and load them , you need to set the ERL_FLAGS environnement variable to the path of a module.

        The attached patch allows couchdb to load plugins from plugin key in couchdb section. It add needed path to the code path, so the vm can find modules.

        ex:
           [couchdb]
           plugins = plugin1, plugin2

         Each plugin can have its own section where it set the binaries patch, eventually if a service need to be added to the supervision you can set the module and function to load like in daemon section and tel if it's a supervisor or simple service.

        It also allows couchdb to load a plugin service (gen_server or such) to the supervision. You can choose if the service is a simple daemon or a supervisor.

         ex:
           [plugin1]
           code_path = /path/to/plugin1/ebin
           daemon = {module, function, [Args]}
           supervisor = false

        Let me know what you think about it. This patch is really useful here and allows me to dynamically load modules I want. Also it eases the integration of external module. For ex I can load my couchapp_ng modules with this lines in local.ini :


            [couchdb]
            plugins = couchapp-ng

            [couchapp-ng]
            code_path=/Users/benoitc/work/couchapp_ng/ebin
            daemon = {couchapp_ng_routes, start_link, []}


            [httpd_design_handlers]
            _app = {couchapp_ng_httpd, handle_app_req}

            [couchapp_ng_handlers]
            rewrite = {couchapp_ng_handlers, rewrite_handler}
            proxy = {couchapp_ng_handlers, proxy_handler}

        and can do the same with geocouch etc. Tested here with these modules.

        Benoit Chesneau made changes -
        Field Original Value New Value
        Attachment couchdb-plugins.patch [ 12469558 ]
        Benoit Chesneau created issue -

          People

          • Assignee:
            Unassigned
            Reporter:
            Benoit Chesneau
          • Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

            • Created:
              Updated:

              Development