Jdbc 带Derby的ActiveRecord如何设置Derby架构

Jdbc 带Derby的ActiveRecord如何设置Derby架构,jdbc,jruby,derby,jrubyonrails,Jdbc,Jruby,Derby,Jrubyonrails,请参阅下面的“更新”,了解我现在知道的是问题的症结所在 我有一个遗留的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 n

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

我有一个遗留的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”

我知道数据库没有问题,因为我可以连接到这个精确副本,并使用SquirreSQL查看所有表。另外,rails应用程序正在以某种方式连接,因为当我打开控制台时,我无法在控制台运行时使用SquirreSQL连接到同一实例,反之亦然

对于active record为什么看不到这些表,有人有什么建议吗

更新:

问题与derby如何将表“组织”到同一文件中的多个“模式”有关。当我从rails创建一个新表时(即通过迁移),该表以“SA”模式结束。我所有的旧表都在“应用程序”模式中(也许我可以移动它们,但如果可以避免的话,我不想这样做……其他应用程序会崩溃)。因此,当我以这种方式从rails访问db时,就好像只有“SA”模式存在。我如何告诉Rails“使用”“App”模式(早些时候,我尝试在表名前面加上前缀,但没有成功)

我相应地重新命名了这个问题

更新#2:

显然,jdbderby gem支持“schema”设置。根据猜测,我尝试将我的database.yml更改为以下内容:

development:
  adapter: jdbcderby
  database: db/perm
  schema: app (also tried APP)
当我在控制台中执行ActiveRecord::Base.connection.tables时设置了应用程序(或应用程序)架构时,我会从应用程序架构中获取表列表(该列表显示的表名都是小写,没有架构名)

但我仍然无法访问这些表。当我在现有表上创建一个模型文件并尝试访问它时,我得到一个JDBCError:“Schema'SA'不存在”。我尝试过各种set_table_名称调用,但没有成功


据我所知,我的数据库没有什么不寻常的地方。但是没有任何关于如何做到这一点的信息。我是地球上唯一一个尝试将传统Derby数据库与Rails结合使用的人吗?

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

如果问题是架构,Derby支持SET schema语句:


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

这不是问题所在。回想一下,我说过,由于rails控制台运行时,其他应用程序被锁定,所以正在建立一些连接。此外,相对的迹象是我如何看到所有其他例子。该应用程序肯定正在连接。我在原来的问题中添加了更多的信息。啊,这是有道理的。您可以发出SET SCHEMA语句,也可以选择以用户应用程序而不是用户SA的身份登录。这一建议在使用ij时可能会有所帮助,但我不知道如何在rails应用程序的上下文中实现它(除了说我尝试在database.yml中设置模式,结果在更新中显示)。我又一次猜了一下,在database.yml中添加了“username:APP”,现在它似乎开始工作了。缺少有关此驱动程序的基本database.yml设置的文档非常烦人。仍然存在一些问题(缺乏对“解释”的支持,这是一个与我的问题无关的已知问题),但原始问题已经解决。因为你关于用户名的提示让我尝试了这个,我会继续接受你的答案。