問題の核心が私が今知っていることについては、以下の「更新」を参照してください。
Railsアプリケーションとのインターフェースを作成したいレガシーDerbyデータベースがあります。
私はRVMを使用しているので、次の手順を実行しました。
1. rvm install jruby (installed 1.6.7.2)
2. rvm use jruby
3. gem install rails
4. rails new myapp
5. add "gem 'activerecord-jdbcderby-adapter'" to Gemfile of new rails app
6. bundle
7. copied my derby db folder (named 'perm') under db in the rails app
8. changed database.yml as follows:
development:
adapter: jdbcderby
database: db/perm
次に、モデルファイルを作成し、set_table_nameを使用してテーブル名の1つに設定しました。レールを実行すると、テーブルが存在しないという例外が発生します。
私がするときもコンソールで
ActiveRecord::Base.connection.tables
返される唯一のテーブルは「schema_migrations」です。
この正確なコピーに接続し、SquirrelSQLを使用してすべてのテーブルを表示できるため、データベースに問題はないことを私は知っています。また、コンソールを開いたときに、コンソールの実行中にSquirrelSQLを使用して同じインスタンスに接続したり、その逆を行ったりすることができないため、railsアプリは何らかの方法で接続しています。
アクティブレコードがテーブルを表示しない理由について誰かが何か提案がありますか?
アップデート:
この問題は、ダービーがテーブルを同じファイル内の複数の「スキーマ」に「編成」する方法と関係があります。Railsから(つまり、移行を使用して)新しいテーブルを作成すると、テーブルは「SA」スキーマになります。私のレガシーテーブルはすべて「APP」スキーマにあります(おそらくそれらを移動することはできますが、それを回避できれば移動したくありません...他のアプリは壊れます)。したがって、この方法でレールからデータベースにアクセスすると、「SA」スキーマのみが存在するようになります。Railsに「App」スキーマを「使用」するように指示するにはどうすればよいですか(初期にテーブル名の前に付けようとしましたが、機能しませんでした)。
それに応じて質問のタイトルを変更しました。
更新#2:
どうやらjdbcderbygemは「スキーマ」設定をサポートしているようです。推測では、database.ymlを次のように変更してみました。
development:
adapter: jdbcderby
database: db/perm
schema: app (also tried APP)
コンソールでActiveRecord::Base.connection.tablesを実行するときにアプリ(またはAPP)スキーマ設定がある場合、アプリスキーマからテーブルのリストを取得します(リストはスキーマ名なしですべて小文字のテーブル名で表示されます)。
しかし、私はまだテーブルにアクセスするのに問題があります。既存のテーブルにモデルファイルを作成してアクセスしようとすると、「スキーマ'SA'が存在しません」というJDBCErrorが発生します。さまざまなset_table_name呼び出しを試しましたが、成功しませんでした。
私の知る限り、私のデータベースには何も異常はありません。しかし、これを行う方法についての情報はどこにもありません。RailsでレガシーDerbyデータベースを使用しようとしたことがあるのは私だけですか?