Rails 3:定义插件gem依赖

Seb*_*btm 10 gem plugins dependencies ruby-on-rails

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

我在哪里定义这种依赖?

我试图在vendor/plugins/my_plugin /中创建一个Gemfile,但是bundle install找不到这个文件.

Seb*_*btm 16

好.我已经解决了.

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

# Gemfile
source "http://rubygems.org"
gemspec
Run Code Online (Sandbox Code Playgroud)

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

bundle gem my_plugin
Run Code Online (Sandbox Code Playgroud)

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

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

s.add_dependency('will_paginate', '~> 3.0.pre2')
Run Code Online (Sandbox Code Playgroud)

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

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

gem 'my_plugin', :path=>'vendor/plugins/my_plugin'
Run Code Online (Sandbox Code Playgroud)

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

5)现在在rails app root中:

bundle install
Run Code Online (Sandbox Code Playgroud)

并且安装了my_plugin(在这种情况下为will_paginate)的依赖性.

感谢Sinetris的初始输入.

  • 我有一个类似的问题,但在我的情况下,它不是一个插件,它是一个引擎/宝石.我按照你说的做了,`bundle install`将gem作为依赖项安装.但似乎应用程序不会加载这些gem或初始化它们,从而导致各地未定义方法的错误.引擎本身工作正常.你知道可能缺少什么吗? (4认同)
  • 我和Tiago有同样的问题,但我的*是*插件.`bundle install`安装所有依赖项 - 我在Gemfile.lock中看到它们 - 但它们不是由Rails加载的.少了什么东西? (3认同)