1

请参阅下面的“更新”,了解我现在知道的问题的症结所在。

我有一个遗留的 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 一起使用的人吗?

4

1 回答 1

0

数据库名称“db/perm”是相对于您当前的工作目录进行解释的,这可能不是您认为的目录。尝试 (1) 在硬盘上搜索文件“derby.log”,该文件可能是在 Rails 应用程序的实际当前工作目录中创建的,或者 (2) 指定 derby 数据库的绝对文件路径,而不是相对文件路径。

如果问题是架构,Derby 支持 SET SCHEMA 语句:http ://db.apache.org/derby/docs/10.8/ref/rrefsqlj32268.html

如果您没有显式设置架构,则默认为您连接的用户名,因此您也可以通过以所需用户名登录来间接设置架构。

于 2012-07-22T18:19:59.527 回答