I met the same issue, and took the following approach:

- Create a centralized plugin app
For me, this is the following app:
https://github.com/sqlabs/sqlabs/tree/master/modules

- Reference the modules of the app from other apps like:
import applications.sqlabls.modules.plugin_color_widget

In this approach, you have to take care of static and view file pathes for 
referencing the ones in the centralized plugin app in individual plugins. 
For instance:

APP = os.path.basename(os.path.dirname(os.path.dirname(__file__)))
URL(APP, 'static', 'plugin_color_widget/css/colorpicker.css')
(see actual example: 
https://github.com/sqlabs/sqlabs/blob/master/modules/plugin_color_widget.py)

Also, you can't reuse model and controller files in the centralized plugin 
app. They should be just for demos or tests.

I'm not sure this approach is the best way to go, but it works fine for me 
for now. What do you think?

Kenji

2012年4月8日日曜日 2時32分47秒 UTC+9 monotasker:
>
> I want to float a proposal for plugin infrastructure that I'd love to see 
> made part of the web2py core. It takes a bit of explanation, so bear with 
> the long post.
>
> I'm starting to find that the syncing issue is a major one with the 
> (otherwise great) plugin infrastructure. I have a growing series of plugins 
> that I'm using in a number of my apps. Most are custom, written by me, but 
> most are in a major state of flux. I use most of plugins in multiple apps, 
> and I tend (because of time constraints) to debug and add features as 
> necessary for whatever app I'm actively developing at the moment. Right 
> now, the only built-in option for keeping these plugins up-to-date is to 
> pack and export them constantly, and constantly be importing them into 
> other apps. What I need is a centralized way to sync plugins. At the same 
> time, I'd like to be able to conveniently isolate the development of a 
> plugin to a dedicated git repo, both for versioning and so that the source 
> files can be quickly made available to the community on github.
>
> I see three ways of approaching this problem:
>
> 1. Run a script that searches my apps for a given plugin and uses a 
> file-syncing library to update older versions. This introduces the 
> possibility of the syncing algorithm overwriting the wrong folder. It also 
> makes it more awkward to use github for plugin development. Since the 
> plugin files are spread across several folders, intermixed with non-plugin 
> files, it's practically impossible to have one git repo for the app and a 
> second for the plugin.
>
> or 
>
> 2. Move plugin files to a central location (maybe web2py/plugins) and 
> create symlinks in the app directories. This avoids the hazards of syncing 
> across apps and makes it easy to set up a git repo (since the plugin folder 
> is outside the app folder and all the plugin files are in a single folder). 
> Setting up and moving the symlinks, though, is time consuming and 
> error-prone if it's done by hand. It also seems redundant to keep symlinks 
> in the app folders at all. Why not just give the app a list of plugins to 
> look for in the 'web2py/plugins' directory?
>
> 3. Change the web2py internals so that plugins can be installed either on 
> a per-app basis (as it is now) or on an installation-wide basis (in 
> web2py/plugins). When a plugin is installed centrally, its name is just 
> added to a list in the default model file and its files are imported into 
> the web2py python environment. No symlinks are needed. This would not break 
> backward compatibility (since the current plugin system could co-exist with 
> this central one side-by-side). But it would make plugins much more useful 
> for me. It also seems to me that this option actually requires the least 
> coding.
>
> So I have two questions. First, do others agree that #3 is the best way to 
> go? Am I missing some key issues? Second, while I'm happy to help implement 
> #3, it's also the solution that I'm least qualified to implement. I'm not 
> sure exactly how the web2py env works and how to make sure that gluon can 
> find, e.g., model and controller files if they're not in the app folders. I 
> think we could ease the problem by requiring that the app folder structure 
> be duplicated in each plugin folder 
> (web2py/plugins/plugin_parrot/controllers/plugin_parrot.py, etc.) but does 
> anyone else know how easy/difficult this would be? If you can point me in 
> the right direction I could try to figure the rest out. But if there's 
> anyone else willing to work on the problem I'd be glad for that too.
>
> Ian
>
>

Reply via email to