diff --git a/.gitignore b/.gitignore index 24f07e20..f3e0f044 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,6 @@ tmp _yardoc doc/ .DS_Store + +# SQLite database +/storage/* diff --git a/Gemfile b/Gemfile index 21c7f04a..843c6271 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org/' ruby file: '.ruby-version' -gem 'sequel' +gem 'sequel', github: 'jeremyevans/sequel' gem 'pg' gem 'sequel_pg', require: 'sequel' gem 'sinatra' @@ -26,6 +26,7 @@ gem 'rake' gem 'rubocop', '~> 1.64.1', require: false gem 'dyno_metadata' gem 'localhost' +gem 'sqlite3' group :test do gem 'climate_control' diff --git a/Gemfile.lock b/Gemfile.lock index 170afdbe..cea4bff9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,10 @@ +GIT + remote: https://github.com/jeremyevans/sequel.git + revision: 7b748b5c89b1448fb6e1c42037b741421fa32101 + specs: + sequel (5.81.0) + bigdecimal + GEM remote: https://rubygems.org/ specs: @@ -43,6 +50,7 @@ GEM mime-types (3.3.1) mime-types-data (~> 3.2015) mime-types-data (3.2020.1104) + mini_portile2 (2.8.7) minitest (5.23.1) multi_json (1.15.0) mustermann (3.0.0) @@ -112,8 +120,6 @@ GEM selma (0.2.2-x86_64-linux) sentry-ruby (5.16.1) concurrent-ruby (~> 1.0, >= 1.0.2) - sequel (5.81.0) - bigdecimal sequel_pg (1.17.1) pg (>= 0.18.0, != 1.2.0) sequel (>= 4.38.0) @@ -130,6 +136,11 @@ GEM sinatra (= 4.0.0) tilt (~> 2.0) spinels-rack-ssl-enforcer (0.3.0) + sqlite3 (2.0.2) + mini_portile2 (~> 2.8.0) + sqlite3 (2.0.2-aarch64-linux-gnu) + sqlite3 (2.0.2-arm64-darwin) + sqlite3 (2.0.2-x86_64-linux-gnu) strscan (3.1.0) temple (0.10.3) thor (1.3.0) @@ -175,11 +186,12 @@ DEPENDENCIES rest-client rubocop (~> 1.64.1) sentry-ruby - sequel + sequel! sequel_pg sinatra sinatra-contrib spinels-rack-ssl-enforcer + sqlite3 wait_for_it warning webmock diff --git a/Rakefile b/Rakefile index ca437774..4f5ee81d 100644 --- a/Rakefile +++ b/Rakefile @@ -24,14 +24,16 @@ namespace(:db) do desc "Run migrations" task :migrate, [:version] do |t, args| require 'sequel' + require_relative 'config/database' # creates DB + Sequel.extension(:migration) - db = Sequel.connect(ENV.fetch('DATABASE_URL', 'postgres://localhost/wikimum')) + if args[:version] puts "Migrating to version #{args[:version]}" - Sequel::Migrator.run(db, 'migrations', target: args[:version].to_i) + Sequel::Migrator.run(DB, 'migrations', target: args[:version].to_i) else puts "Migrating to latest" - Sequel::Migrator.run(db, 'migrations') + Sequel::Migrator.run(DB, 'migrations') end end end diff --git a/config/app.rb b/config/app.rb index 63e0baaf..fb9f9739 100644 --- a/config/app.rb +++ b/config/app.rb @@ -4,13 +4,7 @@ require 'sequel' require_relative '../lib/app' - -DB = Sequel.connect(ENV.fetch('DATABASE_URL', 'postgres://localhost/wikimum')) - -# https://github.com/Starkast/wikimum/issues/412 -# https://sequel.jeremyevans.net/rdoc-plugins/files/lib/sequel/extensions/connection_validator_rb.html -DB.extension(:connection_validator) -DB.pool.connection_validation_timeout = 60 * 5 +require_relative 'database' if App.development? require 'logger' diff --git a/config/database.rb b/config/database.rb new file mode 100644 index 00000000..19957749 --- /dev/null +++ b/config/database.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +database_url = ENV.fetch("DATABASE_URL", "sqlite://storage/wiki.db") +DB = Sequel.connect(database_url) + +# https://github.com/Starkast/wikimum/issues/412 +# https://sequel.jeremyevans.net/rdoc-plugins/files/lib/sequel/extensions/connection_validator_rb.html +DB.extension(:connection_validator) +DB.pool.connection_validation_timeout = 60 * 5 diff --git a/migrations/11_page_search.rb b/migrations/11_page_search.rb index efde1be2..c43b2f89 100644 --- a/migrations/11_page_search.rb +++ b/migrations/11_page_search.rb @@ -1,9 +1,21 @@ # frozen_string_literal: true Sequel.migration do - change do + up do + # SQLite is not using indexes for full text search + # https://sqlite.org/fts5.html + next if database_type == :sqlite + alter_table(:pages) do add_full_text_index %i(title content description) end end + + down do + next if database_type == :sqlite + + alter_table(:pages) do + drop_index %i(title content description) + end + end end diff --git a/vendor/cache/mini_portile2-2.8.7.gem b/vendor/cache/mini_portile2-2.8.7.gem new file mode 100644 index 00000000..ffb238a7 Binary files /dev/null and b/vendor/cache/mini_portile2-2.8.7.gem differ diff --git a/vendor/cache/sequel-5.81.0.gem b/vendor/cache/sequel-5.81.0.gem deleted file mode 100644 index 3e78d7e9..00000000 Binary files a/vendor/cache/sequel-5.81.0.gem and /dev/null differ diff --git a/vendor/cache/sqlite3-2.0.2-aarch64-linux-gnu.gem b/vendor/cache/sqlite3-2.0.2-aarch64-linux-gnu.gem new file mode 100644 index 00000000..d1067d75 Binary files /dev/null and b/vendor/cache/sqlite3-2.0.2-aarch64-linux-gnu.gem differ diff --git a/vendor/cache/sqlite3-2.0.2-arm64-darwin.gem b/vendor/cache/sqlite3-2.0.2-arm64-darwin.gem new file mode 100644 index 00000000..6026ffde Binary files /dev/null and b/vendor/cache/sqlite3-2.0.2-arm64-darwin.gem differ diff --git a/vendor/cache/sqlite3-2.0.2-x86_64-linux-gnu.gem b/vendor/cache/sqlite3-2.0.2-x86_64-linux-gnu.gem new file mode 100644 index 00000000..aecda022 Binary files /dev/null and b/vendor/cache/sqlite3-2.0.2-x86_64-linux-gnu.gem differ diff --git a/vendor/cache/sqlite3-2.0.2.gem b/vendor/cache/sqlite3-2.0.2.gem new file mode 100644 index 00000000..24865511 Binary files /dev/null and b/vendor/cache/sqlite3-2.0.2.gem differ