Моя цель - развернуть микросервис 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 создает файлы базы данных для разработки и тестирования.Но , даже если я добавлю раздел для «производства» , производственная база данных не будет создана.