我正在开发一个由两部分组成的应用程序:一个 ruby 命令行应用程序和一个用于前端的 Rails 应用程序。
我一直在 Ruby 应用程序中使用 ActiveRecord 和 Rails 模型,通过以下方式分别包含它们:
Dir[File.dirname(__FILE__) + '/../../RailsApp/app/models/*.rb'].each do |file|
filename = File.basename(file, File.extname(file))
require_relative "../../RailsApp/app/models/" + filename
end
并通过手动维护两个几乎相同的 Gemfile 文件来获取依赖项(我认为这不是最好的方法)
昨天我将 Devise 添加到 Rails 应用程序,现在当 ruby 应用程序尝试包含用户模型时,消息 undefined method devise for class <xxxxx>
出现。
我在我的 ruby 应用程序的 Gemfile 中添加了 devise gem,但错误仍然存在。如果我理解正确的话,Devise 是一个 Rails 引擎,这就是为什么它不能仅通过要求 gem 来加载的原因。
我读到在另一个应用程序中包含 Rails 模型的更好方法是要求 environment.rb
文件,但是当我尝试这样做时,ActionMailer 出现错误:
undefined method `action_mailer' for #<Rails::Application::Configuration:0xbbb54bc>
如何解决设计问题?有没有比我目前使用的方法更好的方法将 Rails 模型包含在另一个应用程序中以避免维护两个 gemfiles?谢谢
最佳答案
尽管这种架构必须在不久的将来发生变化,但我们设法通过在 ruby 应用程序中包含设计及其初始化程序来解决此错误。
# FIXME: Dependency needed in Rails but not in the engine.
require 'devise'
require_relative "../../RailsApp/config/initializers/devise.rb"
#Load all the models
关于ruby-on-rails - 在 Rails 外部包含用户模型时未定义的方法 'devise',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10654469/