我想知道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查询并在我的生产DB上手动运行它,我得到正确的值。为什么我不能通过生产中的应用程序来实现呢?
任何想法吗?
我添加了更多的日志,这有助于我确定问题问题,我正在使用:Rails.configuration.database_configuration [Rails.env]["数据库")当我在生产中返回一个空字符串,而不是在任何其他环境,我想这是因为在我的数据库。这里有一个链接生产下的开发设置(是什么使生产设置成为和开发者一样)。无论如何,因为我不想改变我的数据库。我刚刚更改了我获取数据库名称的方式。现在效果很好。
我敢打赌这是生产中的权限问题。登录到您的生产服务器并启动db控制台(进入您的rails目录并键入rails db以确保您使用的用户与您的应用程序相同),并尝试从information_schema数据库中的表中进行选择。
你在生产中使用的mysql帐户很可能没有访问你想要在information_schema数据库中的记录