2017-08-21 31 views
0

我试图让activeadmin与Rails 5 API模式一起工作。有几个articles关于这一点,他们几乎都说同样的事情。ActiveAdmin与Rails 5 API模式

首先,应用控制器从ActionController::Base延伸的ActionController::API

class ApplicationController < ActionController::Base 
    include DeviseTokenAuth::Concerns::SetUserByToken 
end 

代替然后创建一个ApiController,其中每个其它控制器延伸自:

class ApiController < ActionController::API 

end 

添加middelware:

config.middleware.use Rack::MethodOverride 
config.middleware.use ActionDispatch::Flash 
config.middleware.use ActionDispatch::Cookies 
config.middleware.use ActionDispatch::Session::CookieStore 

然后添加宝石(我使用的是devise_token_auth而不是devise)

gem 'devise', '> 4.x' 
gem 'activeadmin', github: 'activeadmin' 
gem 'inherited_resources', git: 'https://github.com/activeadmin/inherited_resources' 

并运行bin/rails g active_admin:install。这就是它出错的地方:

 invoke active_record 
     create  db/migrate/20170821114552_devise_create_admin_users.rb 
     create  app/models/admin_user.rb 
     invoke  rspec 
     create  spec/models/admin_user_spec.rb 
     invoke  factory_girl 
     create   spec/factories/admin_users.rb 
     insert  app/models/admin_user.rb 
     route devise_for :admin_users 
     gsub app/models/admin_user.rb 
     gsub config/routes.rb 
     append db/seeds.rb 
     create config/initializers/active_admin.rb 
     exist app/admin 
     create app/admin/dashboard.rb 
     create app/admin/admin_user.rb 
     insert config/routes.rb 
    generate active_admin:assets 
/home/blop/.rvm/gems/ruby-2.4.0/gems/railties-5.1.3/lib/rails/railtie/configuration.rb:95:in `method_missing': undefined method `assets' for #<Rails::Application::Configuration:0x00000003fc9740> 
Did you mean? asset_host (NoMethodError) 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/activeadmin-1.1.0/lib/active_admin/engine.rb:5:in `block (2 levels) in <class:Engine>' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/activeadmin-1.1.0/lib/active_admin/engine.rb:4:in `each' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/activeadmin-1.1.0/lib/active_admin/engine.rb:4:in `block in <class:Engine>' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/railties-5.1.3/lib/rails/initializable.rb:30:in `instance_exec' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/railties-5.1.3/lib/rails/initializable.rb:30:in `run' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/railties-5.1.3/lib/rails/initializable.rb:59:in `block in run_initializers' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:228:in `block in tsort_each' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:431:in `each_strongly_connected_component_from' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:349:in `block in each_strongly_connected_component' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:347:in `each' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:347:in `call' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:347:in `each_strongly_connected_component' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:226:in `tsort_each' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/tsort.rb:205:in `tsort_each' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/railties-5.1.3/lib/rails/initializable.rb:58:in `run_initializers' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/railties-5.1.3/lib/rails/application.rb:353:in `initialize!' 
     from /home/blop/Development/railsapp/config/environment.rb:5:in `<top (required)>' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292:in `require' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292:in `block in require' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:258:in `load_dependency' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/activesupport-5.1.3/lib/active_support/dependencies.rb:292:in `require' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application.rb:102:in `preload' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application.rb:153:in `serve' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application.rb:141:in `block in run' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application.rb:135:in `loop' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application.rb:135:in `run' 
     from /home/blop/.rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application/boot.rb:19:in `<top (required)>' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
     from /home/blop/.rvm/rubies/ruby-2.4.0/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
     from -e:1:in `<main>' 
     create db/migrate/20170821114605_create_active_admin_comments.rb 

回答

0

为什么你使用Rails API,如果你真的需要完整的Rails? Rails API旨在消除不必要的员工,如视图,Cookie,会话等。所有员工对于ActiveAdmin都是强制性的。在这种配置中使用Rails API没有任何好处。

所以,对我来说有两种选择:

  1. 不要使用Rails的API。
  2. 使用两个不同的Gemfiles和共享模型创建两个独立的应用程序(API和Admin)。为了方便,您可以将这两个应用程序存储在同一个存储库中。
+0

ActiveAdmin是我想在不久的将来摆脱的临时解决方案 – blop