diff --git a/.app_version b/.app_version
index ae6dd4e2..25939d35 100644
--- a/.app_version
+++ b/.app_version
@@ -1 +1 @@
-0.29.0
+0.29.1
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 20458ada..8cca7794 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,20 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
-# [0.29.0] - 2025-06-30
+# [0.29.1] - 2025-07-02
+
+## Fixed
+
+- Buttons on the imports page now looks better in both light and dark mode. #1481
+- The PROMETHEUS_EXPORTER_ENABLED environment variable default value is now "false", in quotes.
+- The RAILS_CACHE_DB, RAILS_JOB_QUEUE_DB and RAILS_WS_DB environment variables can be used to set the Redis database number for caching, background jobs and websocket connections respectively. Default values are now 0, 1 and 2 respectively. #1420
+
+## Changed
+
+- Skip DNS rebinding protection for the health check endpoint.
+- Added health check to app.json.
+
+# [0.29.0] - 2025-07-02
You can now move your user data between Dawarich instances. Simply go to your Account settings and click on the "Export my data" button under the password section. An export will be created and you will be able to download it on Exports page once it's ready.
diff --git a/Gemfile b/Gemfile
index 8515a41c..614a2e95 100644
--- a/Gemfile
+++ b/Gemfile
@@ -21,6 +21,7 @@ gem 'importmap-rails'
gem 'kaminari'
gem 'lograge'
gem 'oj'
+gem 'parallel'
gem 'pg'
gem 'prometheus_exporter'
gem 'activerecord-postgis-adapter'
diff --git a/Gemfile.lock b/Gemfile.lock
index e11abddd..640e815e 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -164,11 +164,11 @@ GEM
erubi (1.13.1)
et-orbi (1.2.11)
tzinfo
- factory_bot (6.5.0)
- activesupport (>= 5.0.0)
- factory_bot_rails (6.4.4)
+ factory_bot (6.5.4)
+ activesupport (>= 6.1.0)
+ factory_bot_rails (6.5.0)
factory_bot (~> 6.5)
- railties (>= 5.0.0)
+ railties (>= 6.1.0)
fakeredis (0.1.4)
ffaker (2.24.0)
foreman (0.88.1)
@@ -342,7 +342,7 @@ GEM
zeitwerk (~> 2.6)
rainbow (3.1.1)
rake (13.3.0)
- rdoc (6.14.0)
+ rdoc (6.14.1)
erb
psych (>= 4.0.0)
redis (5.4.0)
@@ -422,10 +422,10 @@ GEM
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
- sentry-rails (5.24.0)
+ sentry-rails (5.26.0)
railties (>= 5.0)
- sentry-ruby (~> 5.24.0)
- sentry-ruby (5.24.0)
+ sentry-ruby (~> 5.26.0)
+ sentry-ruby (5.26.0)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
shoulda-matchers (6.5.0)
@@ -540,6 +540,7 @@ DEPENDENCIES
kaminari
lograge
oj
+ parallel
pg
prometheus_exporter
pry-byebug
diff --git a/README.md b/README.md
index f946478d..789bd889 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
# 🌍 Dawarich: Your Self-Hosted Location History Tracker
[](https://discord.gg/pHsBjpt5J8) | [](https://ko-fi.com/H2H3IDYDD) | [](https://www.patreon.com/freika)
-Donate using crypto: [0x6bAd13667692632f1bF926cA9B421bEe7EaEB8D4](https://etherscan.io/address/0x6bAd13667692632f1bF926cA9B421bEe7EaEB8D4)
[](https://app.circleci.com/pipelines/github/Freika/dawarich)
diff --git a/app.json b/app.json
index 2f2f9e51..9c425d4e 100644
--- a/app.json
+++ b/app.json
@@ -9,5 +9,17 @@
"dokku": {
"predeploy": "bundle exec rails db:migrate"
}
+ },
+ "healthchecks": {
+ "web": [
+ {
+ "type": "startup",
+ "name": "web check",
+ "description": "Checking if the app responds to the /api/v1/health endpoint",
+ "path": "/api/v1/health",
+ "attempts": 10,
+ "interval": 10
+ }
+ ]
}
}
diff --git a/app/views/imports/index.html.erb b/app/views/imports/index.html.erb
index 431ab51b..f86c2c5d 100644
--- a/app/views/imports/index.html.erb
+++ b/app/views/imports/index.html.erb
@@ -8,12 +8,12 @@
<% if current_user.safe_settings.immich_url && current_user.safe_settings.immich_api_key %>
<%= link_to 'Import Immich data', settings_background_jobs_path(job_name: 'start_immich_import'), method: :post, data: { confirm: 'Are you sure?', turbo_confirm: 'Are you sure?', turbo_method: :post }, class: 'rounded-lg py-3 px-5 bg-blue-600 text-white block font-medium' %>
<% else %>
- Import Immich data
+ Import Immich data
<% end %>
<% if current_user.safe_settings.photoprism_url && current_user.safe_settings.photoprism_api_key %>
<%= link_to 'Import Photoprism data', settings_background_jobs_path(job_name: 'start_photoprism_import'), method: :post, data: { confirm: 'Are you sure?', turbo_confirm: 'Are you sure?', turbo_method: :post }, class: 'rounded-lg py-3 px-5 bg-blue-600 text-white block font-medium' %>
<% else %>
- Import Photoprism data
+ Import Photoprism data
<% end %>
diff --git a/config/cable.yml b/config/cable.yml
index 917fe123..ae88845e 100644
--- a/config/cable.yml
+++ b/config/cable.yml
@@ -1,11 +1,11 @@
development:
adapter: redis
- url: <%= "#{ENV.fetch("REDIS_URL")}/2" %>
+ url: <%= "#{ENV.fetch("REDIS_URL")}/#{ENV.fetch('RAILS_WS_DB', 2)}" %>
test:
adapter: test
production:
adapter: redis
- url: <%= "#{ENV.fetch("REDIS_URL")}/2" %>
+ url: <%= "#{ENV.fetch("REDIS_URL")}/#{ENV.fetch('RAILS_WS_DB', 2)}" %>
channel_prefix: dawarich_production
diff --git a/config/environments/development.rb b/config/environments/development.rb
index fadc861a..68c0aeaa 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -26,7 +26,7 @@ Rails.application.configure do
# Enable/disable caching. By default caching is disabled.
# Run rails dev:cache to toggle caching.
- config.cache_store = :redis_cache_store, { url: "#{ENV['REDIS_URL']}/0" }
+ config.cache_store = :redis_cache_store, { url: "#{ENV['REDIS_URL']}/#{ENV.fetch('RAILS_CACHE_DB', 0)}" }
if Rails.root.join('tmp/caching-dev.txt').exist?
config.action_controller.perform_caching = true
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 22b3a3d2..7207e549 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -73,7 +73,7 @@ Rails.application.configure do
config.log_level = ENV.fetch('RAILS_LOG_LEVEL', 'info')
# Use a different cache store in production.
- config.cache_store = :redis_cache_store, { url: "#{ENV['REDIS_URL']}/0" }
+ config.cache_store = :redis_cache_store, { url: "#{ENV['REDIS_URL']}/#{ENV.fetch('RAILS_CACHE_DB', 0)}" }
# Use a real queuing backend for Active Job (and separate queues per environment).
config.active_job.queue_adapter = :sidekiq
@@ -99,8 +99,8 @@ Rails.application.configure do
# "example.com", # Allow requests from example.com
# /.*\.example\.com/ # Allow requests from subdomains like `www.example.com`
# ]
- # Skip DNS rebinding protection for the default health check endpoint.
- # config.host_authorization = { exclude: ->(request) { request.path == "/up" } }
+ # Skip DNS rebinding protection for the health check endpoint.
+ config.host_authorization = { exclude: ->(request) { request.path == "/api/v1/health" } }
hosts = ENV.fetch('APPLICATION_HOSTS', 'localhost').split(',')
config.action_mailer.default_url_options = { host: ENV['SMTP_DOMAIN'] }
diff --git a/config/initializers/geocoder.rb b/config/initializers/geocoder.rb
index 4ddfe9d4..13a8bbdd 100644
--- a/config/initializers/geocoder.rb
+++ b/config/initializers/geocoder.rb
@@ -4,7 +4,7 @@ settings = {
debug_mode: true,
timeout: 5,
units: :km,
- cache: Redis.new(url: "#{ENV['REDIS_URL']}/0"),
+ cache: Redis.new(url: "#{ENV['REDIS_URL']}/#{ENV.fetch('RAILS_CACHE_DB', 0)}"),
always_raise: :all,
http_headers: {
'User-Agent' => "Dawarich #{APP_VERSION} (https://dawarich.app)"
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index 49b0c98b..323655e3 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
Sidekiq.configure_server do |config|
- config.redis = { url: "#{ENV['REDIS_URL']}/1" }
+ config.redis = { url: "#{ENV['REDIS_URL']}/#{ENV.fetch('RAILS_JOB_QUEUE_DB', 1)}" }
config.logger = Sidekiq::Logger.new($stdout)
if ENV['PROMETHEUS_EXPORTER_ENABLED'].to_s == 'true'
@@ -24,7 +24,7 @@ Sidekiq.configure_server do |config|
end
Sidekiq.configure_client do |config|
- config.redis = { url: "#{ENV['REDIS_URL']}/1" }
+ config.redis = { url: "#{ENV['REDIS_URL']}/#{ENV.fetch('RAILS_JOB_QUEUE_DB', 1)}" }
end
Sidekiq::Queue['reverse_geocoding'].limit = 1 if Sidekiq.server? && DawarichSettings.photon_uses_komoot_io?
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 7b20a74f..ca0fb27c 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -67,7 +67,7 @@ services:
APPLICATION_HOSTS: localhost
TIME_ZONE: Europe/London
APPLICATION_PROTOCOL: http
- PROMETHEUS_EXPORTER_ENABLED: false
+ PROMETHEUS_EXPORTER_ENABLED: "false"
PROMETHEUS_EXPORTER_HOST: 0.0.0.0
PROMETHEUS_EXPORTER_PORT: 9394
SELF_HOSTED: "true"
@@ -119,7 +119,7 @@ services:
APPLICATION_HOSTS: localhost
BACKGROUND_PROCESSING_CONCURRENCY: 10
APPLICATION_PROTOCOL: http
- PROMETHEUS_EXPORTER_ENABLED: false
+ PROMETHEUS_EXPORTER_ENABLED: "false"
PROMETHEUS_EXPORTER_HOST: dawarich_app
PROMETHEUS_EXPORTER_PORT: 9394
SELF_HOSTED: "true"