Ruby on rails Rails 3.1可安装的引擎依赖项

Ruby on rails Rails 3.1可安装的引擎依赖项,ruby-on-rails,rails-engines,rails-3.1,Ruby On Rails,Rails Engines,Rails 3.1,我正在为我的应用程序开发一个api。 api是一个可安装的引擎 我的问题是,若gem并没有在父应用程序gemfile中指定,那个么它们就不会加载到api引擎中 我当前的设置: parentapp/Gemfile parentapp/routes.rb api.gempec api/test/dummy/config/routes.rb 奇怪的是,它正在“加载”,因为如果我设置 s.add_dependency 'rails', '~> 3.2' 这会引起一个错误 如果我从父文件中删除ge

我正在为我的应用程序开发一个api。 api是一个可安装的引擎

我的问题是,若gem并没有在父应用程序gemfile中指定,那个么它们就不会加载到api引擎中

我当前的设置:

parentapp/Gemfile

parentapp/routes.rb

api.gempec

api/test/dummy/config/routes.rb

奇怪的是,它正在“加载”,因为如果我设置

s.add_dependency 'rails', '~> 3.2'
这会引起一个错误

如果我从父文件中删除
gem'rabl'
,则堆栈跟踪

NameError: uninitialized constant Rabl
~/Sites/api/config/initializers/rabl_init.rb:1:in `<top (required)>'
~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/engine.rb:556:in `block (2 levels) in <class:Engine>'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/engine.rb:555:in `each'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/engine.rb:555:in `block in <class:Engine>'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:30:in `instance_exec'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:30:in `run'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:55:in `block in run_initializers'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:54:in `each'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:54:in `run_initializers'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/application.rb:96:in `initialize!'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
    ~/Sites/parentapp/config/environment.rb:5:in `<top (required)>'
    <internal:lib/rubygems/custom_require>:29:in `require'
    <internal:lib/rubygems/custom_require>:29:in `require'
    ~/Sites/parentapp/config.ru:3:in `block in <main>'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/builder.rb:4:in `instance_eval'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/builder.rb:4:in `initialize'
    ~/Sites/parentapp/config.ru:1:in `new'
    ~/Sites/parentapp/config.ru:1:in `<main>'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:50:in `eval'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:50:in `load_config'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:43:in `initialize'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:13:in `new'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:13:in `run'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/bin/nack_worker:4:in `<main>'
如果删除此文件,则会发现
模板丢失

Missing template api/v1/myresource/show, api/application/show with {:handlers=>[:erb, :builder, :coffee, :haml], :formats=>[:json]

rabl处理程序不包括在内,因此,rabl没有加载。

我没有像应该的那样需要gems。
lib/api/engine.rb中添加
require“rabl”
解决了这个问题。

什么告诉你它没有加载?你能发布更多关于症状/错误的详细信息吗?就像我在问题中说的:
但是如果我从父应用程序中删除它,它将不起作用。
。如果gem未在父应用程序gem文件中指定,则它在我的引擎中不可用。我也不知道您的实际问题是什么…请发布堆栈跟踪,好吗?我不明白为什么它不应该工作…用堆栈跟踪更新了问题并重新制定了我的问题。如果对我的问题的解释有点模糊,很抱歉。您可以在Gemfile中执行此操作:
gem'rabl',require'rabl'
我非常确定Gemfile不会工作,因为main rails应用程序不会查看引擎的Gemfile
Rails.application.routes.draw do

  mount Api::Engine => "/api"
end
s.add_dependency 'rails', '~> 3.2'
NameError: uninitialized constant Rabl
~/Sites/api/config/initializers/rabl_init.rb:1:in `<top (required)>'
~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/engine.rb:556:in `block (2 levels) in <class:Engine>'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/engine.rb:555:in `each'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/engine.rb:555:in `block in <class:Engine>'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:30:in `instance_exec'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:30:in `run'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:55:in `block in run_initializers'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:54:in `each'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/initializable.rb:54:in `run_initializers'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/application.rb:96:in `initialize!'
    ~/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.1.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
    ~/Sites/parentapp/config/environment.rb:5:in `<top (required)>'
    <internal:lib/rubygems/custom_require>:29:in `require'
    <internal:lib/rubygems/custom_require>:29:in `require'
    ~/Sites/parentapp/config.ru:3:in `block in <main>'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/builder.rb:4:in `instance_eval'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/builder.rb:4:in `initialize'
    ~/Sites/parentapp/config.ru:1:in `new'
    ~/Sites/parentapp/config.ru:1:in `<main>'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:50:in `eval'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:50:in `load_config'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:43:in `initialize'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:13:in `new'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/lib/nack/server.rb:13:in `run'
    ~/Library/Application Support/Pow/Versions/0.3.2/node_modules/nack/bin/nack_worker:4:in `<main>'
Rabl.configure do |config|
 config.include_json_root = false
end
Missing template api/v1/myresource/show, api/application/show with {:handlers=>[:erb, :builder, :coffee, :haml], :formats=>[:json]