[ https://issues.apache.org/jira/browse/COUCHDB-1046?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Benoit Chesneau updated COUCHDB-1046:
-------------------------------------
Attachment: couchdb-plugins-003.patch
here is an alternative patch. Rather than reading a code_path and adding it blindly it only
take patches installed in a plugin directory. The patch does this:
- get the pluging dir from ini
- looks in /plugin_dirs/*/ebin/*.app to get applications to load
- add aboves directory to the path
- start applications application:start(app)
- start app required dependencies by looking in "application" member of the application properties.
This patch is heavily inspired from rabbitmq, and works a lot better than previous attemps.
While I was here, I removed the need of an application section, let couchdb loads daemons
as usual.
Tested with couchapp_ng and geocouch.
> support load of external erlang modules in couchdb.
> ----------------------------------------------------
>
> Key: COUCHDB-1046
> URL: https://issues.apache.org/jira/browse/COUCHDB-1046
> Project: CouchDB
> Issue Type: New Feature
> Components: Database Core
> Reporter: Benoit Chesneau
> Fix For: 1.2
>
> Attachments: couchdb-plugins-003.patch, couchdb-plugins-01.patch, couchdb-plugins-02.patch
>
>
> 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.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
|