2011-04-30 85 views
3

我想知道我的MySQL数据库的当前大小,以获得这些数据我用下面的方法:Ruby on Rails的 - 让MySQL数据库大小

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查询并在生产数据库上手动运行它,则会得到正确的值。为什么我不能通过生产中的应用程序来做到这一点?

有什么想法?

+0

如果运行正确的查询,请在服务器上尝试记录查询。 – Zimbabao 2011-04-30 15:28:32

+0

@Ran谢谢你的提示。如果其他人试图在Rails 4中这样做,我不得不将'mysql_res.each_hash {...}'更改为'mysql_res.each {...}'(它看起来像'map'也可以)。 – 2014-04-23 05:32:33

回答

1

我加了些木柴和帮助我查明 问题,我用的是: Rails.configuration.database_configuration [Rails.env] [“数据库”] 它返回一个空字符串,当我在生产和不在其他 环境中,我想这是因为在我的database.yml中有一个指向 开发设置的链接(生产设置是 与dev相同)。无论如何,因为我不想更改我的database.yml文件,我只是改变了 即时获取数据库名称的方式。 现在它工作得很好。

0

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

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