使用activeadmin和devise在rails上迁移时出现重复错误

时间:2017-08-21 16:15:22

标签: ruby-on-rails devise activeadmin

我正在尝试使用devise在rails上安装activeadmin。 我添加了gemfile并运行了

Traceback Error:


    ---------------------------------------------------------------------------
    KeyError                                  Traceback (most recent call last)
    <ipython-input-112-71707b4cf21a> in <module>()
          1 plot2 = ggplot(sortedDf) + aes(x='TOPIC') + geom_histogram(binwidth=3)
    ----> 2 print plot2

    /Users/anaconda/lib/python2.7/site-packages/plotnine/ggplot.pyc in __repr__(self)
         82         Print/show the plot
         83         """
    ---> 84         self.draw()
         85         plt.show()
         86         return '<ggplot: (%d)>' % self.__hash__()

    /Users/anaconda/lib/python2.7/site-packages/plotnine/ggplot.pyc in draw(self)
        139         # assign a default theme
        140         self = deepcopy(self)
    --> 141         self._build()
        142 
        143         # If no theme we use the default

    /Users/anaconda/lib/python2.7/site-packages/plotnine/ggplot.pyc in _build(self)
        235 
        236         # Apply and map statistics
    --> 237         layers.compute_statistic(layout)
        238         layers.map_statistic(self)
        239 

    /Users/anaconda/lib/python2.7/site-packages/plotnine/layer.pyc in compute_statistic(self, layout)
         92     def compute_statistic(self, layout):
         93         for l in self:
    ---> 94             l.compute_statistic(layout)
         95 
         96     def map_statistic(self, plot):

    /Users/anaconda/lib/python2.7/site-packages/plotnine/layer.pyc in compute_statistic(self, layout)
        369         data = self.stat.use_defaults(data)
        370         data = self.stat.setup_data(data)
    --> 371         data = self.stat.compute_layer(data, params, layout)
        372         self.data = data
        373 

    /Users/anaconda/lib/python2.7/site-packages/plotnine/stats/stat.pyc in compute_layer(cls, data, params, layout)
        194             return cls.compute_panel(pdata, pscales, **params)
        195 
    --> 196         return groupby_apply(data, 'PANEL', fn)
        197 
        198     @classmethod

    /Users/anaconda/lib/python2.7/site-packages/plotnine/utils.pyc in groupby_apply(df, cols, func, *args, **kwargs)
        615         # do not mark d as a slice of df i.e no SettingWithCopyWarning
        616         d.is_copy = None
    --> 617         lst.append(func(d, *args, **kwargs))
        618     return pd.concat(lst, axis=axis, ignore_index=True)
        619 

    /Users/anaconda/lib/python2.7/site-packages/plotnine/stats/stat.pyc in fn(pdata)
        192                 return pdata
        193             pscales = layout.get_scales(pdata['PANEL'].iat[0])
    --> 194             return cls.compute_panel(pdata, pscales, **params)
        195 
        196         return groupby_apply(data, 'PANEL', fn)

    /Users/anaconda/lib/python2.7/site-packages/plotnine/stats/stat.pyc in compute_panel(cls, data, scales, **params)
        221         for _, old in data.groupby('group'):
        222             old.is_copy = None
    --> 223             new = cls.compute_group(old, scales, **params)
        224             unique = uniquecols(old)
        225             missing = unique.columns.difference(new.columns)

    /Users/anaconda/lib/python2.7/site-packages/plotnine/stats/stat_bin.pyc in compute_group(cls, data, scales, **params)
        107         new_data = assign_bins(
        108             data['x'], breaks, data.get('weight'),
    --> 109             params['pad'], params['closed'])
        110         return new_data

    /Users/anaconda/lib/python2.7/site-packages/plotnine/stats/binning.pyc in assign_bins(x, breaks, weight, pad, closed)
        163     df = pd.DataFrame({'bin_idx': bin_idx, 'weight': weight})
        164     wftable = df.pivot_table(
    --> 165         'weight', index=['bin_idx'], aggfunc=np.sum)['weight']
        166 
        167     # Empty bins get no value in the computed frequency table.

    /Users/anaconda/lib/python2.7/site-packages/pandas/core/series.pyc in __getitem__(self, key)
        601             result = self.index.get_value(self, key)
        602 
    --> 603             if not is_scalar(result):
        604                 if is_list_like(result) and not isinstance(result, Series):
        605 

    /Users/anaconda/lib/python2.7/site-packages/pandas/indexes/base.pyc in get_value(self, series, key)

    pandas/index.pyx in pandas.index.IndexEngine.get_value (pandas/index.c:3557)()

    pandas/index.pyx in pandas.index.IndexEngine.get_value (pandas/index.c:3240)()

    pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4363)()

    KeyError: 'weight'

我遇到了这些错误。

rake db:migrate

2 个答案:

答案 0 :(得分:0)

错误是相当自我解释的,您的数据库已经有一个与Devise / Active Admin同名的表,并且表名必须是唯一的。

您是否已经在某个时候使用过/尝试使用activeadmin gem?如果您已经为它创建了表,那么尝试创建和执行新的迁移将会失败,但您应该能够使用它们,或删除它们并制作新的。

或者您的应用程序恰好有一个AdminUser模型供自己使用?如果确实如此,其中一个必须改变。

您应该能够在db/schema.rbdb/migrations/中的旧迁移中看到这两种情况。如果您尝试删除/恢复迁移只是删除其没有脚本的迁移而不先退回(rails db:rollback或数据库备份),那么您可能在数据库中实际存在旧表,您可能希望手动删除

如果确实需要重命名Active Admin表,Github Database tables name prefix #4960中给出的建议是手动编辑迁移并在模型中使用self.table_name=告诉他们新名称。

答案 1 :(得分:0)

好吧,它自己重复的错误是你已经有了同一个名为&#34; admin_users&#34;的表。

请在rails控制台上运行命令,以这种方式查看已创建的表:

  

的ActiveRecord :: Base.connection.tables

如果你在列表中找到相同的表,那么你需要手动删除该表,或者只是删除你的数据库并重新创建它,之后你就可以运行新的迁移了。