我想知道我的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查询并在我的生产数据库上手动运行它,我得到正确的值。为什么我不能通过生产中的应用来做到这一点?
有什么想法吗?
答案 0 :(得分:1)
我添加了更多日志,这有助于我查明 问题,我用的是: Rails.configuration.database_configuration [Rails.env] [ “数据库”] 我在生产时返回一个空字符串而不是任何其他字符串 环境,我想这是因为在我的database.yml中有一个链接 生产中的开发设置(生产设置的原因是什么) 和开发人员一样)。 无论如何,因为我不想改变我的database.yml文件,我只是改变了 我获取数据库名称的方式。 现在它很棒。
答案 1 :(得分:0)
我下注$ 1这是生产中的权限问题。登录到生产服务器并启动数据库控制台(进入rails目录并键入rails db以确保您使用与应用程序相同的用户)并尝试从information_schema数据库中的表中进行选择。
您在生产中使用的mysql帐户很可能无法访问您在information_schema数据库中所需的记录。