См. «ОБНОВЛЕНИЕ» ниже, чтобы узнать, что, как я теперь знаю, является сутью проблемы.
У меня есть устаревшая база данных 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 «организует» таблицы в несколько «схем» в одном файле. Когда я создаю новую таблицу из рельсов (т.е. с миграцией), таблица попадает в схему «SA». Все мои устаревшие таблицы находятся в схеме «APP» (возможно, я мог бы их переместить, но я не хочу этого делать, если смогу этого избежать... другие приложения сломаются). Поэтому, когда я таким образом обращаюсь к БД с рельсов, похоже, что существует только схема «SA». Как мне сказать Rails «использовать» схему «App» (раньше я пытался предварить имя таблицы, но это не сработало)?
Я переименовал вопрос соответственно.
ОБНОВЛЕНИЕ №2:
По-видимому, гем jdbcderby поддерживает параметр «схема». Полагаю, я попытался изменить свой файл database.yml на следующее:
development:
adapter: jdbcderby
database: db/perm
schema: app (also tried APP)
Когда у меня есть настройка схемы приложения (или APP), когда я делаю ActiveRecord::Base.connection.tables в консоли, я получаю список таблиц из схемы приложения (список отображается с именами таблиц в нижнем регистре без имени схемы ).
Но у меня все еще проблемы с доступом к таблицам. Когда я создаю файл модели в существующей таблице и пытаюсь получить к нему доступ, я получаю JDBCError: «Схема« SA »не существует». Я пробовал различные вызовы set_table_name безуспешно.
Насколько я знаю, в моей базе данных нет ничего необычного. Но нигде нет информации, как это сделать. Я единственный человек на земле, который когда-либо пытался использовать устаревшую базу данных Derby с Rails?