我遵循了Rails 文档中的引擎入门,并api在engines目录中设置了一个引擎。根据第6.6 节其他 Gem 依赖项,应该在engines/my_api/my_api.gemspec文件中定义 gem 依赖项,这几乎就是我所做的:
s.add_dependency "responders", "2.0"
Run Code Online (Sandbox Code Playgroud)
添加后
`gem 'my_api', path: "engines/my_api"`
Run Code Online (Sandbox Code Playgroud)
到应用程序Gemfile和运行捆绑器,一切看起来都符合预期:
bundle install | grep responders
Installing responders 2.0.0
Run Code Online (Sandbox Code Playgroud)
在下一步中,我使用相应的控制器等设置根路径,engines/my_api/app/controllers/my_api/application_controller.rb然后添加以下内容:
module MyApi
class ApplicationController < ActionController::Base
respond_to :json
end
end
Run Code Online (Sandbox Code Playgroud)
我启动 Rails 服务器,转到根 url 并猜猜是什么?我收到以下消息:
控制器级别的 respond_to' 功能已被提取到响应者 gem 中。将它添加到您的 Gemfile 以继续使用此功能: gem 'responders', '~> 2.0' 有关详细信息,请参阅 Rails 升级指南。
正如错误消息中所建议的,我已将 gem 添加到应用程序中Gemfile,运行bundle install,一切都按预期工作。
据我了解,引擎应该是自包含的 Rails 应用程序。从一个自包含的应用程序中,我至少希望正确解决它的依赖关系。我认为我只是做错了什么,我希望有人能够帮助我解决这个问题,为什么我必须在应用程序中明确指定 gem …