将JRuby Sinatra SQLite应用程序部署到Tomcat

时间:2019-01-19 17:12:03

标签: jruby sinatra-activerecord

我的目标是在Tomcat服务器上部署少量REST / JSON微服务。我想使用JRuby,Sinatra,SQLite。我对以前的微服务(全部使用Warbler部署)使用JRuby / Sinatra感到幸运,但是这次我想增加持久性,但是我不想部署/维护单独的数据库引擎。

要自学技巧,我一直在遵循 Jump Start Ruby 中的教程。我在DataMapper中遇到了特定于JRuby的问题,因此在ActiveRecord中重新实现了它。 我的解决方案在MRI和JRuby下都可以在bundle exec rackup上正常工作。但是在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>' 

我认为问题是因为数据库未正确准备。我认为需要在我的Tomcat环境中进行bundle exec rake db:createbundle exec rake db:migrate的访问。但是,我不知道如何去做。这是我的问题(不过也可以提供其他帮助):

如何为数据库文件指定相对位置?是否有关于在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时,瑞克创建开发和测试数据库文件。但是即使我为“生产”添加了一个部分,也不会创建任何生产数据库。

0 个答案:

没有答案