开发者

Rails 3: define plugin gem dependency

I wrote a plugin that r开发者_运维知识库equires a gem as a dependency.

Where do I have to define this dependency?

I have tried to create a Gemfile in vendor/plugins/my_plugin/, but bundle install doesn‛t find this file.


Ok. I have solved.

1) Create a Gemfile in vendor/plugins/my_plugin like:

# Gemfile
source "http://rubygems.org"
gemspec

2) Create a gemspec file. In the folder vendor/plugins run this command:

bundle gem my_plugin

(Note this command ask you for overwrite some files. Check the files before answer: Y)

3) Open gemspec file in vendor/plugins/my_plugin/ and add before the keyword end:

s.add_dependency('will_paginate', '~> 3.0.pre2')

(In this example I have used will_paginate how required dipendency of my_plugin)

4) Now go in your rails app and edit Gemfile, add:

gem 'my_plugin', :path=>'vendor/plugins/my_plugin'

The path specified supposed that your plugin is already in vendor/plugins folder of your rails app. Of course when deploy rails app you don't need anymore to specify :path argument.

5) Now in rails app root do:

bundle install

And dependency of my_plugin (will_paginate in this case) is installed.

Thank to Sinetris for initial input.


Create a Gemfile in your vendor/plugins/my_plugin/ like:

# Gemfile
source "http://rubygems.org"
gemspec

gem "your-dependency-gem-name"

note the gemspec directive.

Take a look at Using Bundler with Rubygem gemspecs for more information.


Sebtm's own answer is quite good, but it still didn't work as Tiago and orangechicken described. I had to add

require 'your-dependency-gem-name'

on top of lib/my_plugin.rb right before the engine of my_plugin is loaded.

See http://guides.rubyonrails.org/engines.html#other-gem-dependencies


Gemfile in the application folder.

# Bundle the extra gems:
# gem 'bj'
# gem 'nokogiri'
# gem 'sqlite3-ruby', :require => 'sqlite3'
# gem 'aws-s3', :require => 'aws/s3


Reference for myself. If you're making a plugin that should work with Rails as a RailTie, use rails plugin my_plugin to create the gem instead of bundle gem my_plugin. It saves you (me) a lot of trouble.

Edit: When do you need the gem to work as a RailTie? Whenever you want to add rails generator, rake tasks or add your code to a Rails app (Called Rails Engine). /Edit

$ rails plugin new my_plugin

then you add dependencies

Gem::Specification.new do |s| 
  #...
  s.add_dependency "rails"
  s.add_runtime_dependency "heroku"
  s.add_development_dependency "sqlite3"
end

to include it in your rails app, use path: as described by @Sebtm

or release it to rubygems.

$ gem build my_plugin.gemspec
$ gem push my_plugin-0.7.0.gem #replace version number
#in Gemfile, as always
gem 'my_plugin'

or tag it on github. (use their release UI) and depend on it using

 gem 'my_plugin', github: 'accountname/my_plugin', tag: 'v0.7.0'
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜