ActiveRecord с Derby Как установить схему Derby

См. «ОБНОВЛЕНИЕ» ниже, чтобы узнать, что, как я теперь знаю, является сутью проблемы.

У меня есть устаревшая база данных 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?


person Mark Fraser    schedule 22.07.2012    source источник


Ответы (1)


Имя базы данных 'db/perm' интерпретируется относительно вашего текущего рабочего каталога, который, вероятно, не является тем каталогом, который вы думаете. Попробуйте либо (1) найти на жестком диске файл derby.log, который, вероятно, создается в фактическом текущем рабочем каталоге вашего приложения rails, либо (2) указать абсолютный путь к файлу. в вашу базу данных дерби, а не относительный путь к файлу.

Если проблема связана со схемой, Derby поддерживает оператор SET SCHEMA: http://db.apache.org/derby/docs/10.8/ref/rrefsqlj32268.html

Если вы не задали схему явно, по умолчанию используется имя пользователя, с которым вы подключаетесь, поэтому вы также можете установить схему косвенно, войдя в систему под нужным именем пользователя.

person Bryan Pendleton    schedule 22.07.2012
comment
Это не проблема. Помните, я сказал, что какое-то соединение было установлено, поскольку другие приложения были заблокированы, когда работала консоль rails. Кроме того, относительное указание - это то, как я видел все другие примеры. Приложение определенно подключается. Я добавил больше информации к своему первоначальному вопросу. - person Mark Fraser; 23.07.2012
comment
А, это имеет смысл. Вы можете либо выполнить оператор SET SCHEMA, либо выбрать вход в качестве пользователя APP, а не пользователя SA. - person Bryan Pendleton; 23.07.2012
comment
Это предложение может помочь при использовании ij, но я понятия не имею, как реализовать его в контексте приложения rails (кроме того, что я пытался установить схему в database.yml с результатами, указанными в моем обновлении). - person Mark Fraser; 23.07.2012
comment
Мне снова пришлось сделать предположение, и я добавил имя пользователя: APP в файл database.yml, и теперь он, похоже, работает. Отсутствие документации по базовым настройкам database.yml для этого драйвера раздражает. Есть еще проблемы (отсутствие поддержки «объяснения», что является известной проблемой, не связанной с моим вопросом), но исходная проблема решена. Поскольку ваш намек на имя пользователя заставил меня попробовать это, я продолжу и приму ваш ответ. - person Mark Fraser; 23.07.2012