5

これを行う方法についてのドキュメントを読みましたが、実際には問題があります。私のアプリには、以下のdatabase.ymlファイルで説明されている2つの異なるデータベースがあります。

sqlite_test:
    adapter: sqlite3
    database: db/sqlite_test.sqlite3
    table: plots
    pool: 5
    timeout: 5000

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: test
  pool: 5
  username: myname
  password: mypassword
  host: localhost

私のアプリケーションは、データベースの内容やその構造についての知識がなくても、(基本的な)データベースにデータをプロットする動的プロッターです。これらのデータベースには両方とも異なるデータが含まれています。別のRailsアプリで作成したSQLiteデータベース。

私が使用している現在のアプリは、外部で構築したMYSQLデータベースを中心に構築されています。SQLiteデータベースを/dbディレクトリにコピーしました。だから私のメインモデルでは、私が言うとき:

  class Plot < ActiveRecord::Base

  establish_connection :development
  set_table_name "stock_test"
  set_primary_key :id

すべてがうまく機能し、ダンディです。ただし、次のように変更すると、次のようになります。

 establish_connection :sqlite_test
 set_table_name "plots"

Railsコンソールを介してそのデータベースにアクセスしようとすると、次のようなエラーが発生します。

>>ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter

database.ymlファイルは明らかにアダプターを指定しているので、それがなぜなのかわかりません。ただし、モデルで手動で行うと、すべてが正常に機能します。

class Plot < ActiveRecord::Base
establish_connection(:adapter => "sqlite3", :database => "db/sqlite_test.sqlite3", :pool => 5 )

database.ymlでwhatsを手動で指定したときにすべてが機能するのに、database.yml参照を使用しただけでは機能しないのはなぜですか?

ありがとう!

4

1 に答える 1

4

私は複製を試み、それを機能させました。それは命名規則と関係があります:あなたは開発モードにあり、ARは開発タグを探しますが、あなたの場合はsqliteには存在しません。

これが私のdatabase.ymlです:

development:
  adapter: mysql2
  database: se_development
  username: root
  pool: 5
  timeout: 5000

sqlite_development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

モデルは次のとおりです。

class Plot < ActiveRecord::Base
  establish_connection 'sqlite_' + Rails.env
end

私のために働いた。お役に立てれば。

于 2012-05-08T01:45:34.043 に答える