[ 
https://issues.apache.org/jira/browse/COUCHDB-1046?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12987743#action_12987743
 ] 

Paul Joseph Davis commented on COUCHDB-1046:
--------------------------------------------

I like this better, but I'm still a bit hesitant on a couple issues.

First, why do we need a second path to put plugins in? What's the benefit of 
separating them out of $PREFIX/lib/couchdb/erlang/lib?

I'm not super thrilled about the manipulations for handling deps. Reading 
through the code server manpage there are .ez package things that people could 
use if they want to bundle deps in a single file and not install them 
separately. Though this is only half an idea cause I haven't considered other 
bits.

I like that the plugins are just apps and its becoming a config listener thing 
for starting and stoping apps in the erlang vm.

Also I don't think we should abuse set_env here because I could see badness 
happening if that config section changes too rapidly. Just wrapping it in a 
small gen_server ought to be enough because its not important if config changes 
are serialized I think.



> 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-004.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.

Reply via email to