Я хочу отобразить текущие имена узлов и баз данных в представлении.
Где я могу получить эти имена?
Есть ли какая-либо предопределенная среда или глобальные переменные?
Я хочу отобразить текущие имена узлов и баз данных в представлении.
Где я могу получить эти имена?
Есть ли какая-либо предопределенная среда или глобальные переменные?
Вы можете создать объект конфигурации рельсов и получить от него необходимую информацию:
config = Rails::Configuration.new
host = config.database_configuration[RAILS_ENV]["host"]
database = config.database_configuration[RAILS_ENV]["database"]
Подробнее см. документация для Rails:: Конфигурация.
С Rails 3 вы можете использовать
Rails.configuration.database_configuration[Rails.env]
или
Rails.application.config.database_configuration[Rails.env]
или
ActiveRecord::Base.connection_config
Запрос Rails:: configuration.new не работает в Rails 3
config = Rails::Configuration.new
NoMethodError: undefined method `new' for Rails::Configuration:Module
[...]
Если вы используете MySQL или Postgres, то это работает
ActiveRecord::Base.connection.current_database
Но это работает только с драйверами, которые внедрили этот метод. Например, он не будет работать для SQLite.
В Rails 3 это наиболее легко доступно через Rails::Application.config
, например:
YourApplicationClassName::Application.config.database_configuration[::Rails.env]
Если вы попытаетесь вызвать его непосредственно на Rails
вместо YourApplicationClassName
, рельсы выдадут вам предупреждение о дебекации. Если вы не знаете, что такое константа вашего приложения, попробуйте Rails.application.class.name
в консоли Rails для вашего приложения.
Ниже приведен метод, когда вы подключены к нескольким базам данных. Протестировано на Sqlite3 и Mysql2
MyModel.connection.instance_variable_get(:@config)[:database]
Протестировано в консоли Rails:
ActiveRecord::Base.connection.instance_variable_get(:@config)
следующая информация должна отсутствовать: адаптер, хост, кодирование, повторное подключение, имя базы данных, имя пользователя, пароль