Rails 3:定义插件gem依赖

时间:2010-11-21 17:06:58

标签: ruby-on-rails plugins dependencies gem

我写了一个插件,需要宝石作为依赖。

我在哪里定义这种依赖?

我尝试在vendor / plugins / my_plugin /中创建Gemfile,但bundle install找不到此文件。

5 个答案:

答案 0 :(得分:16)

确定。我已经解决了。

1)在vendor / plugins / my_plugin中创建 Gemfile ,如:

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

2)创建 gemspec 文件。在 vendor / plugins 文件夹中运行以下命令:

bundle gem my_plugin

(注意此命令要求您覆盖一些文件。在回答之前检查文件:Y)

3)在vendor / plugins / my_plugin /中打开 gemspec 文件,并在关键字结束前添加:

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

(在这个例子中我使用了will_paginate my_plugin需要的依赖性)

4)现在进入您的rails应用并编辑 Gemfile ,添加:

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

指定的路径假设您的插件已经在rails应用程序的vendor / plugins文件夹中。 当然,在部署rails app时,您不再需要指定:path 参数。

5)现在在rails app root do:

bundle install

安装了my_plugin的依赖(在这种情况下为will_paginate)。

感谢Sinetris的初步投入。

答案 1 :(得分:2)

在vendor / plugins / my_plugin / like中创建一个Gemfile:

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

gem "your-dependency-gem-name"

请注意gemspec指令。

请查看Using Bundler with Rubygem gemspecs了解详情。

答案 2 :(得分:1)

Sebtm自己的答案非常好,但它仍然没有像Tiago和orangechicken描述的那样起作用。我不得不添加

require 'your-dependency-gem-name'
在加载lib/my_plugin.rb引擎之前,在my_plugin之上

请参阅http://guides.rubyonrails.org/engines.html#other-gem-dependencies

答案 3 :(得分:0)

应用程序文件夹中的Gemfile。

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

答案 4 :(得分:0)

参考我自己。如果您正在制作一个可以作为RailTie使用Rails的插件,请使用rails plugin my_plugin创建gem而不是bundle gem my_plugin。它为你(我)节省了很多麻烦。

编辑:你什么时候需要宝石作为RailTie工作?每当您想添加 rails生成器 rake任务或将您的代码添加到Rails应用程序(称为 Rails引擎)时。 /编辑

$ rails plugin new my_plugin

然后添加依赖项

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

要将其包含在您的rails应用中,请按@Sebtm

所述使用path:

或将其发布到rubygems。

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

或在github上标记它。 (使用他们的发布UI)并使用

依赖它
 gem 'my_plugin', github: 'accountname/my_plugin', tag: 'v0.7.0'