【问题标题】:Why does my Rails 3.2.3 Application fail because my Engine plugin has devise installed为什么我的 Rails 3.2.3 应用程序失败,因为我的引擎插件已安装
【发布时间】:2013-12-13 17:49:02
【问题描述】:

我有一个名为 bdm_content_server 的 Rails 应用程序

我有一个名为 bdmcs 的 Rails 引擎插件。

引擎作为本地文件 gem 安装在我的应用程序中。

gem "bdmcs", :path => "../bdmcs"

引擎运行良好,在运行 WEBrick 时我能够通过应用程序访问它的控制器和视图。

我在引擎内部安装了 devise 来控制谁可以访问引擎的视图。设置很顺利(稍作修改ala Rails engine and devise),我能够在引擎中执行数据库迁移,但是现在当我尝试迁移它安装的应用程序时,我收到了一个错误:

undefined method `secret_key=' for Devise:Module
/var/apps/bdm_content/bdmcs/config/initializers/devise.rb:7:in `block in <top (required)>'
/var/lib/gems/1.9.1/gems/devise-2.2.8/lib/devise.rb:267:in `setup'
/var/apps/bdm_content/bdmcs/config/initializers/devise.rb:3:in `<top (required)>'

应用似乎没有确认引擎的设计设置和配置。

我在应用程序的 Gemfile 中安装了 devise gem,如果我删除它,我会得到一个不同的错误:

cannot load such file -- devise
/var/apps/bdm_content/bdmcs/lib/bdmcs.rb:1:in `require'
/var/apps/bdm_content/bdmcs/lib/bdmcs.rb:1:in `<top (required)>'

有人有什么想法吗?

我搜索了类似的问题,但只找到了与 Devise in an Application 或 Devise in an Engine 相关的问题,但没有找到两者都涉及的问题。

提前致谢 - 测试人员

这是我的 /bdmcs/config/initializers/devise.rb 文件(由 Devise 安装在我的引擎中):

Devise.setup do |config|
    config.secret_key = 'some_random_key'
    config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
    require 'devise/orm/active_record'
    config.case_insensitive_keys = [ :email ]
    config.strip_whitespace_keys = [ :email ]
    config.skip_session_storage = [:http_auth]
    config.stretches = Rails.env.test? ? 1 : 10
    config.reconfirmable = true
    config.password_length = 8..128
    config.reset_password_within = 6.hours
    config.sign_out_via = :delete
    config.router_name = :bdmcs_user
end

还有我的 /bdmcs/lib/bdcms.rb 文件:

require 'devise'
require "bdmcs/engine"

module Bdmcs
end

已编辑 - 清晰度和更多细节

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 devise


    【解决方案1】:

    在您的 config/initializers/devise.rb 文件中添加以下行:

    config.secret_key = 'Your secret Key'
    

    您可以使用rake secret 来生成您的密钥。

    确保您在 Gemfile 中使用最新版本的 Devise。

    还要确保重新启动服务器。这样做后,我 99% 的问题都消失了。

    【讨论】:

    • 这一行已经在我的引擎插件内的 devise.rb 中设置了,但这就是它的绊脚石。好像没有设置配置变量,因为在引擎之外没有识别设计。或者您是说也将其添加到我的应用程序中?我那里没有 devise.rb 初始化程序。
    • 好的,你在你的engine.rb中需要'devise'
    • 是的,我已经用该文件的内容更新了问题。
    • 好吧,我不太明白问题出在哪里。我带你看过这个:github.com/plataformatec/devise/wiki/…
    • 问题是当我尝试在应用程序上执行 db:migrate 时,它​​失败了,因为它没有正确确认引擎中存在的 Devise 安装(问题中发布的错误)。所以我实际上无法对我的应用程序做任何事情。无法运行服务器,无法迁移数据库,什么都没有。我最初在引擎中设置 Devise 时使用了您提供的链接,但感谢您提供的链接。
    【解决方案2】:

    我发现这是一个设计版本问题。

    由于某种原因,引擎内部的设计安装在 3.2.2 版本,而应用中安装的设计是 2.2.8

    不确定这是怎么发生的,因为我没有指定任何特定版本,并且两者都是在同一个 rails 环境中生成的。

    升级后,Railties 和 Devise 之间出现版本冲突,所以我最终不得不将 Rails 升级到 4.0.0(以及随之而来的所有其他东西),然后它就可以工作了。

    我仍然遇到捆绑程序版本问题,但我已经解决了使用 bundle exec ... 执行我的 rake 和 rails 任务的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2013-10-27
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多