RVM および MySQL の Ruby 1.9.2 ではすでに初期化されているという定数の警告が表示される
-
26-09-2019 - |
質問
RVM で Ruby 1.9.2.rc2 を使用して Rails 3 RC を実行すると、MySQL ドライバー バンドルから次のような非常に多数のエラーが発生し続けます。
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant MysqlRes
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant MysqlField
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant MysqlError
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant VERSION
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant OPT_CONNECT_TIMEOUT
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant OPT_COMPRESS
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant OPT_NAMED_PIPE
/opt/local/rvm/gems/ruby-1.9.2-rc2/gems/mysql-2.8.1/lib/mysql_api.bundle: warning: already initialized constant INIT_COMMAND
これは次のように表示されます rails console
単体テスト、完全な Rails スタックを必要とするものはすべて、同じ環境で Sequel を直接使用するスクリプトは必要ありません。
バンドル自体はロードされ、MySQL ドライバーは機能しますが、この膨大な警告の山は、Rails を介して実行されるものに先立って表示されます。通常、これは、 mysql
gem は Rails 環境内のどこかにあります。gem は Gemfile で宣言されます。
gem 'rails', '3.0.0.rc'
gem 'haml'
gem 'sequel'
gem 'mysqlplus'
gem 'mysql'
これは、Rails オートローダーが Mysql ライブラリがすでにロードされていることを認識できず、再度ロードしているためだと思います。これを修正する簡単な方法はありますか?
アップデート:
負荷 mysql
または mysqlplus
ただし、両方を同時に実行しないと、次のような警告が表示されます。 mysqlplus
のすべての機能が含まれています mysql
これは Sequel の依存関係です。
解決
mysqlplus gem が必要ですか?私は mysql 2.8.1 のみを備えた Rails 3 を使用しています。
gem 'mysql', '2.8.1'
私は mysqlplus を使用したことがありませんが、警告に表示されている定数を設定し、mysql gem がロードされるときにこれらの定数を再度設定すると推測しています。
アップデート:代わりに mysql2 を使用してください
#gem 'mysql', '2.8.1' gem 'mysql2'
また、database.yml 内のデータベース アダプターを更新する必要があります。
development: #adapter: mysql adapter: mysql2 database: somedatabase_development