【问题标题】:Active_admin running an error when run rake db:migrateActive_admin 在运行 rake db:migrate 时运行错误
【发布时间】:2013-11-12 13:25:47
【问题描述】:

我正在尝试在 Rails 4 下安装 ActiveAdmin 以生成我的管理面板。

我添加了 gem 并使用以下命令进行了安装:

gem 'activeadmin', github: 'gregbell/active_admin'
bundle install
rails g active_admin:install              # creates the AdminUser class
rails g active_admin:install User         # uses an existing class

但是当我尝试迁移时出现错误:

$ rake db:migrate
==  AddDeviseToAdminUsers: migrating ==========================================
-- change_table(:admin_users)
rake aborted!
An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: duplicate column name: email: ALTER TABLE "admin_users" ADD "email" varchar(255) DEFAULT '' NOT NULL/usr/local/rvm/gems/ruby-2.0.0-p247/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in `initialize'

正如issue 753 on github 中所述,我将AddDeviseToAdminUsers 迁移从change_table 更改为create_table,但这会导致此错误:

==  AddDeviseToAdminUsers: migrating ==========================================
-- create_table(:admin_users)
rake aborted!

有人可以帮忙吗?

【问题讨论】:

  • 第二个错误还有什么问题吗? SQL 异常?您的第一个错误表明该表在运行迁移之前存在。

标签: ruby-on-rails devise activeadmin


【解决方案1】:

您看到的异常是由于迁移与您现有的数据库结构冲突。您的 admin_users 表已经包含一个“电子邮件”列,这就是您看到错误 duplicate column name: email 的原因。

您应该只运行active_admin:install 生成器一次。使用干净的应用程序运行 ActiveAdmin 设置应该只涉及以下内容:

# Add the BETA gem with Rails 4 support. The ActiveAdmin master
# branch is still in heavy development.
gem 'activeadmin', github: 'gregbell/active_admin'

# Bundle
bundle install

# Setup ActiveAdmin 
rails g active_admin:install

对于更高级的情况,如果您已经有一个管理员用户的 ActiveRecord 模型,那么您可以使用生成器的这个变体:rails g active_admin:install MyAdminUser

【讨论】:

  • 嘿@CMaresh,我删除了编译文件,然后重新开始,我添加了gem,然后运行捆绑安装,然后运行rails g active_admin:install MyAdminUser。我去了这个错误:usr/local/rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.0/lib/action_dispatch/routing/route_set.rb:409:in add_route': Invalid route name, already in use: 'admin_root' (ArgumentError) You may have defined two routes with the same name using the :as`选项,或者您可能正在覆盖已由具有相同命名的资源定义的路由。对于后者,您可以将使用resources 创建的路由限制为
  • @zacchj 您必须在应用程序上从头开始。我的猜测是您的 config/routes.rb 现在列出了两次 ActiveAdmin.routes(self)。另外,我怀疑您是否希望您的管理员用户的模型是“MyAdminUser”。
  • 我只有一个 ActiveAdmin.routes(self),起初它生成了两个,但我删除了一个,但是当我运行 rake db:migrate: = DeviseCreateAdminUsers: migrating = =========================================--create_table(:admin_users) rake 中止!发生错误,此迁移和所有后续迁移均已取消: SQLite3::SQLException: 表“admin_users”已存在:CREATE TABLE “admin_users”(“id” INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, “email” varchar(255) DEFAULT ''非空,
  • 如果可以的话,从一个干净的数据库开始,并确保只有一个迁移正在创建表“admin_users”。
  • 嘿@CMaresh,谢谢你的帮助,我觉得很愚蠢,我清理了我的数据库,并试图重新开始,我安装了 gem,运行 bundle install,我创建了 admin_users:“rails g active_admin:install",但现在我有这个错误:usr/local/rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.0/lib/action_dispatch/routing/route_set.rb:409:in `add_route':无效的路由名称,已在使用:'admin_root'(ArgumentError)。但我仍然找不到 admin_route 已经在哪里:/
猜你喜欢
  • 2012-08-03
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 2017-04-16
  • 2012-11-23
  • 1970-01-01
相关资源
最近更新 更多