Разверните приложение JRuby Sinatra SQLite на Tomcat - PullRequest
0 голосов
/ 19 января 2019

Моя цель - развернуть микросервис REST / JSON с малым объемом на сервере Tomcat.Я хочу использовать JRuby, Sinatra, SQLite.Мне повезло с JRuby / Sinatra для предыдущих микросервисов (все развернуты с использованием Warbler), но на этот раз я хочу добавить постоянство, но не хочу развертывать / поддерживать отдельный механизм базы данных.

Длянаучиться технике, я следовал этому уроку в Jump Start Ruby .Я столкнулся с проблемой, связанной с JRuby, с DataMapper и переопределил ее с ActiveRecord. Мое решение отлично работает с bundle exec rackup под MRI и JRuby. Но после деформации и запуска под Tomcat я получаю эту ошибку:

database configuration does not specify adapter from
/opt/apache-tomcat-9.0.14/webapps/chapter2/WEB-INF/gems/gems/activerecord-5.1.6.1/lib/active_record/connection_adapters/connection_specification.rb:182:in
`spec' from
...
in `<main>' from
/opt/apache-tomcat-9.0.14/webapps/chapter2/WEB-INF/config.ru:1:in
`<main>' 

Я думаю, что проблема в том, что база данныхне правильно подготовлен.Я думаю, что нужно bundle exec rake db:create и bundle exec rake db:migrate в моей среде Tomcat.Однако я не могу понять, как это сделать.Вот мои вопросы (но не стесняйтесь предлагать и другую помощь):

Как указать относительное местоположение файла базы данных?Есть ли лучшая практика для размещения базы данных в рамках установки Tomcat?Я думаю work/Catalina/localhost/<appname>.sqlite3 это хорошее место для этого.Я бы предпочел не использовать абсолютный путь, но я могу использовать /opt/db/<appname>.sqlite3 при необходимости.

Какова лучшая стратегия для создания базы данных и создания таблиц внутри нее?Есть ли для этого стандартные грабли?Или я должен создать файл базы данных в своей среде разработки, а затем просто скопировать файл туда, куда я хочу?

Как заставить приложение работать в «производственном» режиме на моем сервере Tomcat?В моем файле App.rb я require 'sinatra/activerecord', а затем set database_file: 'config/database.yml'config/database.yml я указываю расположение базы данных для сред разработки и тестирования:

# sqlite3 configuration file for activerecord
default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

test:
  <<: *default
  database: db/test.sqlite3

Мне кажется, что мне нужно установить переменную среды DATABASE_ENV, чтобы задать местоположение базы данных.Это все еще верно при работе под Java / Tomcat?

Когда я bundle exec rake db:create, rake создает файлы базы данных для разработки и тестирования.Но , даже если я добавлю раздел для «производства» , производственная база данных не будет создана.

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