Куда поместить базу данных sqlite3 при развертывании приложения JRuby-On-Rails в качестве войны?

Предыстория: я хочу развернуть небольшое JRuby-On-Rails-приложение, используя warblers исполняемый файл war, поэтому я могу просто бросить .war-файл, и каждый сможет запустить его с помощью java -jar app.war.

Приложение использует sqlite3 для хранения некоторых данных, а файл production-db находится по адресу WEB-INF/db внутри war.

Каждый раз, когда приложение запускается, winstone распаковывает war во временную директорию, и все действия, выполненные в течение этой сессии, теряются, если приложение запускается во второй раз (потому что production-db снова распаковывается из war-файла).

Итак, как я могу использовать один и тот же db-файл каждый раз, когда приложение запускается?


person Jan    schedule 21.12.2010    source источник


Ответы (1)


Вы можете либо жестко закодировать абсолютный путь в файле database.yml, либо добавить некоторую логику, чтобы выбрать путь за пределами веб-приложения из переменной среды или системного свойства. Например:

production:
  db: <%= java.lang.System.getProperty('db') %>

Запустить с помощью:

java -Ddb=/path/to/db -jar app.war
person Nick Sieger    schedule 21.12.2010
comment
Омг, спасибо. К вашему сведению, данный путь должен быть абсолютным, а не относительным. - person Rafał Cieślak; 23.11.2020