Vote #78989
未完了Gemify redmine plugins
0%
説明
I want to install redmine plugins by adding gem name to Gemfile.local like "redmine_github_hook":https://github.com/koppen/redmine_github_hook plugin.
Current installing/updating method have below cautions for me.
- Difficult to specify plugin version
** Server maintainer should exec
$ git clone [--depth=1] -b <release version> https://github.com/foo/bar/, but plugin README often describes installing master - Difficult to detect plugins vulnerability with using "bundler-audit":https://github.com/rubysec/bundler-audit ** We have to check each plugins by hand now
I'm happy if Redmine::Plugin.load requires gem's init.rb.
- Pros
** Easy to install plugin: only writing gem name to Gemfile.local
** Easy to specify plugin version: only specifying gem version to Gemfile.local
** Easy to update plugin: only executing
$ bundle update <plugin gem name>** Easy to detect (only gemified) plugins vulnerability with using bundler-audit - Cons ** Redmine should detect wheather redmine plugin or not from all bundle installed gem
For example, support_gem_plugin.patch can load gemified plugin.
Gemfile.local example is below(I fixed little existing sidebar_hide plugin).
gem 'sidebar_hide', github: 'sho-h/sidebar_hide', branch: 'redmine_support_gem_plugin_test'
This was gemified and "specified directory":https://github.com/sho-h/sidebar_hide/blob/redmine_support_gem_plugin_test/init.rb#L11 in init.rb.
journals
+100
I have a question.
"require initializer" is called twice. Is it correct?
One is in this patch and another is in original code.
--------------------------------------------------------------------------------
> +100
Thanks!
> "require initializer" is called twice. Is it correct?
> One is in this patch and another is in original code.
Oh... Maybe it's cause problem.
I left original code. Original code is for loading current structure plugins.
I think, there are below patterns.
# Same plugin and same version: Maybe, problem doesn't break to the surface.
# Same plugin and different version: Cause problems. Both require will success. Overwritten by plugin dir's one halfway.
# Different plugins and same ID: Cause problems. Both require will success. Each function will not be conflicted. But redmine will misunderstand only plugin dir's one was loaded.
# Different plugins and different IDs: No problem.
1., 2., 3. have same problem. @registered_plugins[id] was overwritten.
To fix this, for example, Redmine::Plugin.register(id) raises(or fails) if plugin was already installed.
<pre><code class="diff">
def self.register(id, &block)
+ raise ... if installed?(id) # or return
+
p = new(id)
p.instance_eval(&block)
</code></pre>
I think, it is difficult to find 2. by administrator if only return.
--------------------------------------------------------------------------------
+1 .
I agree.
I want all plugin and installation of Redmine main body to change to Gem. Also, I would like the installation work to be easy.
--------------------------------------------------------------------------------
Sho HASHIMOTO wrote:
> I think, it is difficult to find 2. by administrator if only return.
Can we raise exception if plugin name is duplicate?
--------------------------------------------------------------------------------
>> I think, it is difficult to find 2. by administrator if only return.
>>
> Can we raise exception if plugin name is duplicate?
OK. I created another ticket. #28412
--------------------------------------------------------------------------------