Gem Rails 引擎中的依赖项
Gem dependencies in Rails Engines
我遵循了 Getting Started with Engines in Rails documentation and I have set up an api
engine in engines
directory. According to the paragraph 6.6 Other Gem Dependencies 应该在 engines/my_api/my_api.gemspec
文件中定义 gem 依赖项,这几乎就是我所做的:
s.add_dependency "responders", "2.0"
添加后
`gem 'my_api', path: "engines/my_api"`
对于应用程序 Gemfile
和 运行ning 捆绑器,一切看起来都符合预期:
bundle install | grep responders
Installing responders 2.0.0
在下一步中,我设置了一个带有相应控制器等的根路径,然后转到 engines/my_api/app/controllers/my_api/application_controller.rb
并添加以下内容:
module MyApi
class ApplicationController < ActionController::Base
respond_to :json
end
end
我启动 rails 服务器,进入根目录 url,你猜怎么着?我收到以下消息:
控制器级 respond_to' 功能已提取到响应器 gem。将它添加到您的 Gemfile 以继续使用此功能:gem 'responders', '~> 2.0' 请参阅 Rails 升级指南了解详细信息。
按照错误消息中的建议,我已将 gem 添加到应用程序 Gemfile
、运行 bundle install
并且一切正常。
据我了解,引擎应该是独立的 rails 应用程序。从一个独立的应用程序我至少期望正确解决它的依赖关系。我假设我只是做错了什么,我希望有人能够帮助我解决这个问题,为什么我必须在应用程序 Gemfile
中明确指定 gem?
编辑:
忘记提及版本:
$ gem list | grep rails
coffee-rails (4.1.0)
jquery-rails (4.0.3)
rails (4.2.1)
rails-deprecated_sanitizer (1.0.3)
rails-dom-testing (1.0.6)
rails-html-sanitizer (1.0.2)
sass-rails (5.0.3)
sprockets-rails (2.2.4)
如您所见,gem 包含在您的包中,无论它是否在您应用程序的 Gemfile 中。不同之处在于,在应用程序初始化期间调用 Bundler.require
时,它仅自动需要应用程序 Gemfile 中的 gem - 而不是间接依赖项。
如果您的 gem 需要加载响应程序 gem gem 那么它应该明确要求它 - 例如在 my_api.rb[=11= 的顶部]
我遵循了 Getting Started with Engines in Rails documentation and I have set up an api
engine in engines
directory. According to the paragraph 6.6 Other Gem Dependencies 应该在 engines/my_api/my_api.gemspec
文件中定义 gem 依赖项,这几乎就是我所做的:
s.add_dependency "responders", "2.0"
添加后
`gem 'my_api', path: "engines/my_api"`
对于应用程序 Gemfile
和 运行ning 捆绑器,一切看起来都符合预期:
bundle install | grep responders
Installing responders 2.0.0
在下一步中,我设置了一个带有相应控制器等的根路径,然后转到 engines/my_api/app/controllers/my_api/application_controller.rb
并添加以下内容:
module MyApi
class ApplicationController < ActionController::Base
respond_to :json
end
end
我启动 rails 服务器,进入根目录 url,你猜怎么着?我收到以下消息:
控制器级 respond_to' 功能已提取到响应器 gem。将它添加到您的 Gemfile 以继续使用此功能:gem 'responders', '~> 2.0' 请参阅 Rails 升级指南了解详细信息。
按照错误消息中的建议,我已将 gem 添加到应用程序 Gemfile
、运行 bundle install
并且一切正常。
据我了解,引擎应该是独立的 rails 应用程序。从一个独立的应用程序我至少期望正确解决它的依赖关系。我假设我只是做错了什么,我希望有人能够帮助我解决这个问题,为什么我必须在应用程序 Gemfile
中明确指定 gem?
编辑:
忘记提及版本:
$ gem list | grep rails
coffee-rails (4.1.0)
jquery-rails (4.0.3)
rails (4.2.1)
rails-deprecated_sanitizer (1.0.3)
rails-dom-testing (1.0.6)
rails-html-sanitizer (1.0.2)
sass-rails (5.0.3)
sprockets-rails (2.2.4)
如您所见,gem 包含在您的包中,无论它是否在您应用程序的 Gemfile 中。不同之处在于,在应用程序初始化期间调用 Bundler.require
时,它仅自动需要应用程序 Gemfile 中的 gem - 而不是间接依赖项。
如果您的 gem 需要加载响应程序 gem gem 那么它应该明确要求它 - 例如在 my_api.rb[=11= 的顶部]