请看下面的“更新”,我现在知道的是问题的症结所在。
我有一个遗留的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“模式中(也许我可以移动它们,但如果可以避免it...other应用程序崩溃,我不想这样做)。因此,当我以这种方式从rails访问数据库时,就好像只有"SA“模式存在。如何告诉Rails‘使用’App‘模式(早先我尝试在表名前加上前缀,但没有成功)?
我相应地重新命名了这个问题。
更新#2:
显然,jdbcderby gem支持"schema“设置。在猜测中,我尝试将我的database.yml更改为以下内容:
development:
adapter: jdbcderby
database: db/perm
schema: app (also tried APP)当我有app (或APP)模式设置时,当我在控制台中执行ActiveRecord::Base.connection.tables时,我会从app模式中获得表的列表(列表中显示的表名都是小写的,没有模式名)。
但是我仍然在访问这些表时遇到了问题。当我在现有的表上创建一个模型文件并试图访问它时,我得到一个JDBCError:“模式'SA‘不存在”。我尝试了各种set_table_name调用,但都没有成功。
据我所知,我的数据库没有任何异常。但目前还没有关于如何做到这一点的信息。我是不是世界上唯一一个尝试在Rails中使用遗留Derby数据库的人?
发布于 2012-07-23 02:20:00
数据库名称'db/perm‘是相对于您当前的工作目录进行解释的,该目录可能不是您认为的那个目录。尝试(1)在硬盘中搜索文件'derby.log',该文件可能是在您的rails应用程序的实际当前工作目录中创建的,或者(2)指定到您的derby数据库的绝对文件路径,而不是相对文件路径。
如果问题出在模式上,Derby支持SET schema语句:http://db.apache.org/derby/docs/10.8/ref/rrefsqlj32268.html
如果不显式设置模式,它将默认使用连接所用的用户名,因此您也可以通过以所需的用户名登录来间接设置模式。
https://stackoverflow.com/questions/11596929
复制相似问题