Files
metasploit-gs/api/Msf/DBManager/Connection.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

735 lines
29 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Module: Msf::DBManager::Connection
&mdash; Documentation by YARD 0.9.37
</title>
<link rel="stylesheet" href="../../css/style.css" type="text/css" />
<link rel="stylesheet" href="../../css/common.css" type="text/css" />
<script type="text/javascript">
pathId = "Msf::DBManager::Connection";
relpath = '../../';
</script>
<script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
</head>
<body>
<div class="nav_wrap">
<iframe id="nav" src="../../class_list.html?1"></iframe>
<div id="resizer"></div>
</div>
<div id="main" tabindex="-1">
<div id="header">
<div id="menu">
<a href="../../_index.html">Index (C)</a> &raquo;
<span class='title'><span class='object_link'><a href="../../Msf.html" title="Msf (module)">Msf</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../DBManager.html" title="Msf::DBManager (class)">DBManager</a></span></span>
&raquo;
<span class="title">Connection</span>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="../../class_list.html">
<svg width="24" height="24">
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
</svg>
</a>
</div>
<div class="clear"></div>
</div>
<div id="content"><h1>Module: Msf::DBManager::Connection
</h1>
<div class="box_info">
<dl>
<dt>Included in:</dt>
<dd><span class='object_link'><a href="../DBManager.html" title="Msf::DBManager (class)">Msf::DBManager</a></span></dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/msf/core/db_manager/connection.rb</dd>
</dl>
</div>
<h2>
Instance Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#active-instance_method" title="#active (instance method)">#<strong>active</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns true if we are ready to load/store data.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#after_establish_connection-instance_method" title="#after_establish_connection (instance method)">#<strong>after_establish_connection</strong>(opts = {}) &#x21d2; void </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Finishes <span class='object_link'><a href="#connect-instance_method" title="Msf::DBManager::Connection#connect (method)">#connect</a></span> after ApplicationRecord.establish_connection` has succeeded by <span class='object_link'><a href="Migration.html#migrate-instance_method" title="Msf::DBManager::Migration#migrate (method)">migrating database</a></span> and setting <span class='object_link'><a href="Workspace.html#workspace-instance_method" title="Msf::DBManager::Workspace#workspace (method)">Workspace#workspace</a></span>.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#connect-instance_method" title="#connect (instance method)">#<strong>connect</strong>(opts = {}) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Connects this instance to a database.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#connection_established%3F-instance_method" title="#connection_established? (instance method)">#<strong>connection_established?</strong> &#x21d2; true, false </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Checks if the spec passed to ApplicationRecord.establish_connection` can connect to the database.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#create_db-instance_method" title="#create_db (instance method)">#<strong>create_db</strong>(opts) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Attempt to create the database.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#disconnect-instance_method" title="#disconnect (instance method)">#<strong>disconnect</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Disconnects a database session.</p>
</div></span>
</li>
</ul>
<div id="instance_method_details" class="method_details_list">
<h2>Instance Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="active-instance_method">
#<strong>active</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns true if we are ready to load/store data</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
3
4
5
6
7
8
9
10
11
12
13</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/connection.rb', line 3</span>
<span class='kw'>def</span> <span class='id identifier rubyid_active'>active</span>
<span class='comment'># In a Rails test scenario there will be a connection established already, and it needs to be checked manually to see if a migration is required
</span> <span class='comment'># This check normally happens in after_establish_connection, but that might not always get called - for instance during RSpec tests
</span> <span class='kw'>if</span> <span class='const'>Rails</span><span class='period'>.</span><span class='id identifier rubyid_env'>env</span><span class='period'>.</span><span class='id identifier rubyid_test?'>test?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_migrated'>migrated</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_usable'>usable</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_connection_established?'>connection_established?</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_migrated'>migrated</span> <span class='op'>=</span> <span class='op'>!</span><span class='id identifier rubyid_needs_migration?'>needs_migration?</span>
<span class='kw'>end</span>
<span class='comment'># usable and migrated a just Boolean attributes, so check those first because they don&#39;t actually contact the
</span> <span class='comment'># database.
</span> <span class='id identifier rubyid_usable'>usable</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_migrated'>migrated</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_connection_established?'>connection_established?</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="after_establish_connection-instance_method">
#<strong>after_establish_connection</strong>(opts = {}) &#x21d2; <tt>void</tt>
</h3><div class="docstring">
<div class="discussion">
<p class="note returns_void">This method returns an undefined value.</p>
<p>Finishes <span class='object_link'><a href="#connect-instance_method" title="Msf::DBManager::Connection#connect (method)">#connect</a></span> after ApplicationRecord.establish_connection` has succeeded by <span class='object_link'><a href="Migration.html#migrate-instance_method" title="Msf::DBManager::Migration#migrate (method)">migrating database</a></span> and setting <span class='object_link'><a href="Workspace.html#workspace-instance_method" title="Msf::DBManager::Workspace#workspace (method)">Workspace#workspace</a></span>.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/connection.rb', line 19</span>
<span class='kw'>def</span> <span class='id identifier rubyid_after_establish_connection'>after_establish_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='comment'># Migrate the database, if needed
</span> <span class='id identifier rubyid_migrate'>migrate</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Exception</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_exception'>exception</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_error'>error</span> <span class='op'>=</span> <span class='id identifier rubyid_exception'>exception</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DB.connect threw an exception</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>error:</span> <span class='id identifier rubyid_exception'>exception</span><span class='rparen'>)</span>
<span class='comment'># remove connection to prevent issues when re-establishing connection
</span> <span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_remove_connection'>remove_connection</span>
<span class='kw'>else</span>
<span class='comment'># Flag that migration has completed
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_migrated'>migrated</span> <span class='op'>=</span> <span class='kw'>true</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="connect-instance_method">
#<strong>connect</strong>(opts = {}) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Connects this instance to a database</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/connection.rb', line 38</span>
<span class='kw'>def</span> <span class='id identifier rubyid_connect'>connect</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='kw'>not</span> <span class='ivar'>@usable</span>
<span class='id identifier rubyid_nopts'>nopts</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_nopts'>nopts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>port</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_nopts'>nopts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>port</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_nopts'>nopts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>port</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
<span class='kw'>end</span>
<span class='comment'># Prefer the config file&#39;s pool setting
</span> <span class='id identifier rubyid_nopts'>nopts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pool</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='int'>75</span>
<span class='comment'># Prefer the config file&#39;s wait_timeout setting too
</span> <span class='id identifier rubyid_nopts'>nopts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>wait_timeout</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='int'>300</span>
<span class='kw'>begin</span>
<span class='comment'># Check ApplicationRecord was already connected by Rails::Application.initialize! or some other API.
</span> <span class='kw'>unless</span> <span class='id identifier rubyid_connection_established?'>connection_established?</span>
<span class='id identifier rubyid_create_db'>create_db</span><span class='lparen'>(</span><span class='id identifier rubyid_nopts'>nopts</span><span class='rparen'>)</span>
<span class='comment'># Configure the database adapter
</span> <span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_establish_connection'>establish_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_nopts'>nopts</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Exception</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_error'>error</span> <span class='op'>=</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DB.connect threw an exception</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>error:</span> <span class='id identifier rubyid_e'>e</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>ensure</span>
<span class='id identifier rubyid_after_establish_connection'>after_establish_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_nopts'>nopts</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>true</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="connection_established?-instance_method">
#<strong>connection_established?</strong> &#x21d2; <tt>true</tt>, <tt>false</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Checks if the spec passed to ApplicationRecord.establish_connection` can connect to the database.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>true</tt>)</span>
&mdash;
<div class='inline'>
<p>if an active connection can be made to the database using the current config.</p>
</div>
</li>
<li>
<span class='type'>(<tt>false</tt>)</span>
&mdash;
<div class='inline'>
<p>if an active connection cannot be made to the database.</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
116
117
118
119
120
121
122
123
124
125
126
127</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/connection.rb', line 116</span>
<span class='kw'>def</span> <span class='id identifier rubyid_connection_established?'>connection_established?</span>
<span class='kw'>begin</span>
<span class='comment'># use with_connection so the connection doesn&#39;t stay pinned to the thread.
</span> <span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_with_connection'>with_connection</span> <span class='kw'>do</span>
<span class='comment'># There&#39;s a bug in Rails 7.1 where ApplicationRecord.connection.active? returns false even though we can get a connection
</span> <span class='comment'># calling `verify!` instead will ensure we are connected even if `active?` incorrectly returns false
</span> <span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_verify!'>verify!</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>ConnectionNotEstablished</span><span class='comma'>,</span> <span class='const'>PG</span><span class='op'>::</span><span class='const'>ConnectionBad</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_error'>error</span>
<span class='kw'>false</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="create_db-instance_method">
#<strong>create_db</strong>(opts) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Attempt to create the database</p>
<p>If the database already exists this will fail and we will continue on our merry way, connecting anyway. If it doesnt, we try to create it. If that fails, then it wasnt meant to be and the connect will raise a useful exception so the user wont be in the dark; no need to raise anything at all here.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/connection.rb', line 81</span>
<span class='kw'>def</span> <span class='id identifier rubyid_create_db'>create_db</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='kw'>case</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>adapter</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>postgresql</span><span class='tstring_end'>&#39;</span></span>
<span class='comment'># Try to force a connection to be made to the database, if it succeeds
</span> <span class='comment'># then we know we don&#39;t need to create it :)
</span> <span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_establish_connection'>establish_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='comment'># Do the checkout, checkin dance here to make sure this thread doesn&#39;t
</span> <span class='comment'># hold on to a connection we don&#39;t need
</span> <span class='id identifier rubyid_conn'>conn</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_checkout'>checkout</span>
<span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection_pool'>connection_pool</span><span class='period'>.</span><span class='id identifier rubyid_checkin'>checkin</span><span class='lparen'>(</span><span class='id identifier rubyid_conn'>conn</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Exception</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_errstr'>errstr</span> <span class='op'>=</span> <span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
<span class='kw'>if</span> <span class='id identifier rubyid_errstr'>errstr</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>does not exist</span><span class='regexp_end'>/i</span></span> <span class='kw'>or</span> <span class='id identifier rubyid_errstr'>errstr</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>Unknown database</span><span class='regexp_end'>/</span></span>
<span class='id identifier rubyid_ilog'><span class='object_link'><a href="../../top-level-namespace.html#ilog-instance_method" title="#ilog (method)">ilog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Database doesn&#39;t exist \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>database</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>\&quot;, attempting to create it.</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_establish_connection'>establish_connection</span><span class='lparen'>(</span>
<span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>database</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>postgres</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>schema_search_path</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>public</span><span class='tstring_end'>&#39;</span></span>
<span class='rparen'>)</span>
<span class='rparen'>)</span>
<span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_create_database'>create_database</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>database</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_ilog'><span class='object_link'><a href="../../top-level-namespace.html#ilog-instance_method" title="#ilog (method)">ilog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Trying to continue despite failed database creation: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_remove_connection'>remove_connection</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="disconnect-instance_method">
#<strong>disconnect</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Disconnects a database session</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
132
133
134
135
136
137
138
139
140
141</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/db_manager/connection.rb', line 132</span>
<span class='kw'>def</span> <span class='id identifier rubyid_disconnect'>disconnect</span>
<span class='kw'>begin</span>
<span class='const'><span class='object_link'><a href="../../ApplicationRecord.html" title="ApplicationRecord (class)">ApplicationRecord</a></span></span><span class='period'>.</span><span class='id identifier rubyid_remove_connection'>remove_connection</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_migrated'>migrated</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_modules_cached'>modules_cached</span> <span class='op'>=</span> <span class='kw'>false</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Exception</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_error'>error</span> <span class='op'>=</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DB.disconnect threw an exception:</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>error:</span> <span class='id identifier rubyid_e'>e</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:01:38 2026 by
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.37 (ruby-3.1.5).
</div>
</div>
</body>
</html>