【问题标题】:How to draw routes in Rails engine gem?如何在 Rails 引擎 gem 中绘制路线?
【发布时间】:2017-01-24 04:48:04
【问题描述】:

在我正在构建的引擎 gem 中绘制路线时遇到了很多麻烦。不知道我做错了什么......我一定已经尝试了六种不同的东西。目前我的宝石看起来像这样:

宝石结构:

├── Gemfile
├── MIT-LICENSE
├── README.md
├── app
│   └── controllers
│       └── rails_dribbble_oauth
│           └── main_controller.rb
├── config
│   └── routes.rb
├── lib
│   ├── rails_dribbble_oauth
│   │   ├── engine.rb
│   │   └── version.rb
│   └── rails_dribbble_oauth.rb
└── rails_dribbble_oauth.gemspec

/app/controllers/rails_dribbble_oauth/main_controller.rb:

module RailsDribbbleOauth
  class MainController < ::ApplicationController
    # some instance methods
  end
end

/lib/rails_dribbble_oauth/engine.rb:

module RailsDribbbleOauth
  class Engine < ::Rails::Engine
    isolate_namespace :RailsDribbbleOauth
  end
end

lib/rails_dribbble_oauth.rb:

require "rails_dribbble_oauth/engine"

module RailsDribbbleOauth
end

config/routes.rb:

Rails.application.routes.draw do
    get 'request',     to: 'main#request',  as: "dribbble_oauth_request"
    get 'callback',    to: 'main#passthru', as: "dribbble_callback"
end

当我将它添加到我的测试应用程序并运行 rake 路由时,gem 中定义的路由都不会出现在我的应用程序中。

我也尝试使用RailsDribbbleOauth::Engine.routes.draw 安装它,然后将mount RailsDribbbleOauth::Engine, at: '/dribbble' 添加到我的测试应用程序中,但结果是NameError: uninitialized constant RailsDribbbleOauth::Engine

非常感谢任何帮助,谢谢。

编辑:测试应用的 Gemfile 确实包含 gem。 Gem 目前正在lib/engines/rails_dribbble_oauth 的测试应用程序中开发。来自测试应用的 Gemfile:gem 'rails-dribbble-oauth', path: 'lib/engines/rails_dribbble_oauth'。尽管如此,rake routes 不会产生 gem 中定义的任何路由。

【问题讨论】:

  • 您是否将引擎添加到应用程序 Gemfile,例如gem 'rails_dribble_oauth', path: 'engines/rails_dribble_oauth?如果是这样,您在引擎中定义的任何模型都应该可以从 rails console 访问。
  • 谢谢克里斯。我没有在我的 gem 中定义任何模型。是的,gemfile 在主应用程序的 Gemfile 中:gem 'rails-dribbble-oauth', path: 'lib/engines/rails_dribbble_oauth'
  • 您是否尝试过将其从 lib 移出到 RAILS_ROOT/engines 中,但有时 lib 位于 LOAD_PATH 中,Rails 可能会认为文件映射到 Lib:: 命名空间中的类。跨度>
  • 感谢您的提示。移动了 gem 并更改了 Gemfile 中的路径,但 rake routes 没有更改。
  • 我认为您的错误与您定义路线的方式没有任何关系,但是无论出于何种原因,父应用程序都没有加载引擎。 uninitialized constant RailsDribbbleOauth::Engine 很明显,你需要先解决这个问题。只要添加引擎,只要它是由rails plugin 生成的,就意味着它被需要并集成到父应用程序中。有没有文件lib/rails_dribbble_oauth/engine.rb

标签: ruby-on-rails ruby rubygems


【解决方案1】:

也许你需要将引擎添加到测试应用Gemfile,例如:

# if the engines in at RAILS_ROOT/engines
gem 'rails_dribble_oauth', path: 'engines/rails_dribble_oauth'

# somewhere else
gem 'rails_dribble_oauth', path: '~/dev/rails_dribble_oauth'

【讨论】:

  • 感谢您的意见。我在测试应用程序中的 gemfile 已经有 gem,它正在该测试应用程序的 lib 文件夹中开发。来自 gemfile:gem 'rails-dribbble-oauth', path: 'lib/engines/rails_dribbble_oauth'.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多