为什么我的Rails 3.2.3应用程序失败,因为我的Engine插件已经安装了

时间:2013-11-27 21:29:50

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

我有一个名为bdm_content_server

的Rails应用程序

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

引擎在我的应用程序中作为本地文件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或Engine中的Devise相关的问题,而不是涉及两者的问题。

先谢谢   - Testero

这是我的/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

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

2 个答案:

答案 0 :(得分:0)

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

config.secret_key = 'Your secret Key'

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

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

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

答案 1 :(得分:0)

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

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

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

升级之后,我遇到了Railties和Devise之间的版本冲突,所以我最终不得不将Rails升级到4.0.0(以及随之而来的所有其他内容),然后就可以了。

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