Tia*_*ago 47 gem dependencies rails-engines ruby-on-rails-3
我在这里做引擎,它可以独立工作.
当我将它转换为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')
Run Code Online (Sandbox Code Playgroud)
在应用程序中,当我进行bundle安装时,它列出了所有这些依赖项,但是当我运行应用程序时,我收到了很多未定义的方法错误(例如来自paperclip的has_attachment).似乎应用程序不加载引擎依赖项.这是默认行为吗?我可以改变吗?引擎内部的插件也发生了同样的事情.
如果我手动插入那些宝石,在应用程序Gemfile中,所有工作......
Dan*_*urg 76
将它们包含在gemfile中并运行bundle install.然后在你的需要他们lib/<your_engine>/engine.rb file.别忘了要求rubygems
require 'rubygems'
require 'paperclip'
require 'jquery-rails'
require 'rails3-jquery-autocomplete'
require 'remotipart'
require 'cancan'
Run Code Online (Sandbox Code Playgroud)
然后在你的主机应用程序(你包含你的宝石的应用程序)运行捆绑安装/捆绑更新(捆绑更新为我做了伎俩)然后一切都应该完美.您也可以通过在主机应用程序中启动控制台来测试它,只需输入模块名称即可
Loading development environment (Rails 3.0.3)
irb(main):001:0> Paperclip
=> Paperclip
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
car*_*ini 23
你可以像Daniel发布的那样手动要求它们,你也可以自动要求它们.您需要在3个文件中添加依赖项:
yourengine.gemspec
s.add_dependency "rails", '4.1.0'
s.add_dependency "sqlite3"
Run Code Online (Sandbox Code Playgroud)的Gemfile
# Imports dependencies from yourengine.gemspec
gemspec
Run Code Online (Sandbox Code Playgroud)LIB/yourengine.rb
# requires all dependencies
Gem.loaded_specs['yourengine'].dependencies.each do |d|
require d.name
end
require 'yourengine/engine'
module Yourengine
end
Run Code Online (Sandbox Code Playgroud)更新:这是如何要求依赖项的简单演示.您应该测试它并过滤不需要的项目,例如:require d.name除非d.type ==:development(thx @ imsinu9)
| 归档时间: |
|
| 查看次数: |
21542 次 |
| 最近记录: |