我有一个名为bdm_content_server
我有一个名为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
已编辑 - 清晰度和更多细节
答案 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任务的问题。