我在这里做引擎,它可以独立工作 .
当我将它转换为gem并将其加载到另一个应用程序中时,我得到了许多未定义的错误,来自我的引擎gem的依赖 .
这是gemspec:
s.add_dependency('paperclip')
s.add_dependency('jquery-rails')
s.add_dependency('rails3-jquery-autocomplete')
s.add_dependency('remotipart')
s.add_dependency('cancan')
在应用程序中,当我进行bundle安装时,它列出了所有这些依赖项,但是当我运行应用程序时,我收到了很多未定义的方法错误(例如来自paperclip的has_attachment) . 似乎应用程序不加载引擎依赖项 . 这是默认行为吗?我可以改变吗?引擎内部的插件也发生了同样的事情 .
如果我手动插入那些宝石,在应用程序Gemfile中,所有工作......
7 回答
将它们包含在gemfile中并运行bundle install . 然后在
lib/<your_engine>/engine.rb file
中要求它们 . 别忘了要求rubygems然后在你的主机应用程序(你包含你的宝石的应用程序)运行捆绑安装/捆绑更新(捆绑更新为我做了伎俩)然后一切都应该完美 . 您还可以通过在主机应用中启动控制台来测试此操作,然后输入模块名称,例如
希望这可以帮助
你可以像Daniel发布的那样手动要求它们,你也可以自动要求它们 . 您需要在3个文件中添加依赖项:
更新:这是如何要求依赖项的简单演示 . 您应该测试它并过滤不需要的项目,例如:require d.name除非d.type ==:development(thx @ imsinu9)
来自paperclip的README:
对于非Rails用法:
我有同样的问题,并为我修复它 .
您必须将gem文件添加到.gemspec文件和engine.rb文件中 . 在.gemspec文件中它将是:
s.add_dependency "kaminari", "0.16.1"
在顶部的engine.rb文件中添加:
require "kaminari"
我想你还需要将gem添加到rails引擎Gemfile和bundle install中,但我不确定你是否需要它 .
目前(我认为Rails 3.1及以上版本),你不应该再在test / dummy / Gemfile中声明任何gems:
从test / dummy / Gemfile引用(使用
rails plugin new my_engine --full
生成):你真的不应该在Gemsec上需要它们,它们应该被加载 . 当你说"here is the gemspec"时,你用
Gem::Specification.new do |s|
或其他东西围绕它,对吗?您可以使用简单的bundler命令包含环境的所有gem:
您可以将其添加到
config/initializer
.