请参阅下面的“更新”,了解我现在知道的问题的症结所在。
我有一个遗留的 Derby 数据库,我想制作一个 Rails 应用程序与之交互。
我正在使用 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 将其设置为一个表名,当我运行 rails c 时,我得到一个表不存在的异常。
当我这样做时也在控制台中
ActiveRecord::Base.connection.tables
返回的唯一表是“schema_migrations”。
我知道数据库没有任何问题,因为我可以连接到这个确切的副本并使用 SquirrelSQL 查看所有表。此外,rails 应用程序正在以某种方式连接,因为当我打开控制台时,我无法在控制台运行时使用 SquirrelSQL 连接到同一个实例,反之亦然。
有人对为什么活动记录看不到表格有任何建议吗?
更新:
该问题与 derby 如何将表“组织”成同一文件中的多个“模式”有关。当我从rails(即迁移)创建一个新表时,该表最终以“SA”模式结束。我所有的旧表都在“APP”模式中(也许我可以移动它们,但如果可以避免的话,我不想这样做......其他应用程序会中断)。因此,当我以这种方式从 rails 访问数据库时,就好像只存在“SA”模式。我如何告诉 Rails '使用'“应用程序”模式(早期我尝试在表名前加上前缀但没有用)?
我相应地重新命名了这个问题。
更新#2:
显然 jdbcderby gem 支持“模式”设置。猜测我尝试将我的 database.yml 更改为以下内容:
development:
adapter: jdbcderby
database: db/perm
schema: app (also tried APP)
当我在控制台中执行 ActiveRecord::Base.connection.tables 时拥有应用程序(或 APP)架构设置时,我会从应用程序架构中获取表列表(该列表显示的表名全部小写,没有架构名)。
但我仍然无法访问表格。当我在现有表上创建模型文件并尝试访问它时,我收到 JDBCError:“Schema 'SA' 不存在”。我尝试了各种 set_table_name 调用,但均未成功。
据我所知,我的数据库没有什么异常。但是没有任何关于如何做到这一点的信息。我是世界上唯一一个曾尝试将旧版 Derby 数据库与 Rails 一起使用的人吗?