Миграция приложений с Java EE / PHP на Rails 3 - Модели - PullRequest
0 голосов
/ 05 апреля 2011

В настоящее время у меня есть приложение, написанное на Java EE, и интерфейсный сайт, размещенный в Joomla. Я начинаю процесс свертывания 2 в одно приложение Rails 3. Однако это будет очень долгий и поэтапный процесс.

Я пытаюсь найти наилучшую практику для работы с моделями в этом случае. Например, первый этап - миграция регистрации пользователя. В настоящее время это обрабатывается в Java, затем Java заполняет таблицы Joomla соответствующими данными. Rails собирается взять на себя эту функцию и заполнить свою собственную базу данных (разработать) и перекрестно заполнить базы данных Java и Joomla.

По мере развития проекта и устаревших частей приложения модели будут удалены (если я проживу так долго;).

Я знаю, что есть несколько способов получить доступ к нескольким базам данных из приложения rails (все сводится к одному и тому же, как оно настроено), но я пытаюсь найти самый разумный способ сделать это:

Должен ли я просто создавать мини-приложения в / lib?

Должен ли я использовать генераторы рельсов и создавать реальные модели рельсов (т.е. / app / models / old-app-name /)

Как мне заставить все связать?

Так как бы вы справились с этим? У меня есть кое-что и работает, но это в начале проекта, и то, что у меня есть, довольно грязно. Я действительно хотел бы иметь возможность генерировать модели рельсов, как во 2-м варианте выше, но не уверен точно, каков будет процесс, если подключить все это.

Чтобы сделать вещи более интересными, я перехожу на BDD / TDD, поэтому я хочу, чтобы все это можно было проверить через RSpec2 и т. Д.

1 Ответ

1 голос
/ 06 апреля 2011

Ну, хорошо, тогда я просто сообщу всем, что я сделал, в надежде, что кто-то найдет это полезным.

Я решил пойти с обычными моделями рельсов с внешней базой данных, настроенной в database.yml:

# MySQL.  Versions 4.1 and 5.0 are recommended.
#
# Install the MySQL driver:
#   gem install mysql
# On Mac OS X:
#   sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql
# On Mac OS X Leopard:
#   sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-            config=/usr/local/mysql/bin/mysql_config
#       This sets the ARCHFLAGS environment variable to your native architecture
# On Windows:
#   gem install mysql
#       Choose the win32 build.
#       Install MySQL and put its /bin directory on your path.
#
# And be sure to use new-style password hashing:
#   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
development:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: myapp_development
  pool: 5
  username: db_user
  password: db_pass  
  socket: /private/tmp/mysql.sock 

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: myapp_test
  pool: 5
  username: db_user
  password: db_pass  
  socket: /private/tmp/mysql.sock

production:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: my_app_production
  pool: 5
  username: db_user
  password: db_pass   
  socket: /private/tmp/mysql.sock 

## This is the external DB ##
external_app:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: external_db
  pool: 5
  username: db_user
  password: db_pass
  socket: /private/tmp/mysql.sock

Затем создать модели со стандартным генератором рельсов:

rails g model external_app_name/model_name --no-migrations

Поскольку модели находятся в существующей, не-рельсовой базе данных, я не хочу миграций, делайте что хотите здесь.

Это создает базовую пустую модель в app / models / external_app_name / model_name.rb, котораяЗатем я изменяю таким образом:

class ExernalApp::ModelName < ActiveRecord::Base

  establish_connection :external_app # from database.yml
  set_table_name :external_app_table_name
  set_primary_key :id

end

Оттуда вы можете продолжить разработку, как если бы это была обычная модель рельсов (что, конечно, так и есть;).

Этот метод также создаствсе тесты и прочее барахло, которое создает ваш обычный генератор, чтобы вы могли просто двигаться вперед.Предположительно, вы также можете сделать это с помощью строительных лесов и т. Д., Если на то есть веская причина (не для меня, нужны только модели).

ПРИМЕЧАНИЕ:

Этотакже создает модуль в app / models / external_app.rb, который выглядит следующим образом:

    module ExternalApp
      def self.table_name_prefix
        'external_app_'
      end
    end

Первоначально я установил префикс в '', но, похоже, он не оказывает никакого влияния при создании.

Я знаю, что ничего из этого не является ракетостроением или даже очень далеко от компьютерных наук, но я думаю, что это организационно-технологическая вещь, которая, как мне кажется, сделает жизнь максимально легкой и «рельсовой», насколько это возможно, во время этой части проекта.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...