Ruby on Rails - 获取MySql DB大小

时间:2011-04-30 15:23:24

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

我想知道我的MySql DB的当前大小,为了获取该数据我使用以下方法:

def self.calculate_total_db_size
    sql = "SELECT table_schema AS 'database',
                  sum( data_length + index_length ) / ( 1024 *1024 ) AS size
                  FROM information_schema.TABLES
                  WHERE ENGINE=('MyISAM' || 'InnoDB' )
                  AND table_schema = '#{get_current_db_name}'"
    return  perform_sql_query(sql)
  end



def self.get_current_db_name    
    return Rails.configuration.database_configuration[Rails.env]["database"]
end

def self.perform_sql_query(query)
     result = []
     mysql_res = ActiveRecord::Base.connection.execute(query)
     mysql_res.each_hash{ |res| result << res }
     return result
end

这在我的开发和登台环境中运行良好,但是由于某些原因,当我在生产中运行它时,查询不会返回任何值,如果我接受MySql查询并在我的生产数据库上手动运行它,我得到正确的值。为什么我不能通过生产中的应用来做到这一点?

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我添加了更多日志,这有助于我查明 问题,我用的是: Rails.configuration.database_configuration [Rails.env] [ “数据库”] 我在生产时返回一个空字符串而不是任何其他字符串 环境,我想这是因为在我的database.yml中有一个链接 生产中的开发设置(生产设置的原因是什么) 和开发人员一样)。 无论如何,因为我不想改变我的database.yml文件,我只是改变了 我获取数据库名称的方式。 现在它很棒。

答案 1 :(得分:0)

我下注$ 1这是生产中的权限问题。登录到生产服务器并启动数据库控制台(进入rails目录并键入rails db以确保您使用与应用程序相同的用户)并尝试从information_schema数据库中的表中进行选择。

您在生产中使用的mysql帐户很可能无法访问您在information_schema数据库中所需的记录。