Problem:
During the upgrade of 1.18.2, following the guide provided on Foreman :: Manual, I had 2 errors :
- SQLite was introduced, but package was not installed
- Syntax error on TRUNCATE during db:sessions:clear
The first issue I solved, but indicates a missing additional command in the upgrade guide.
The second issue was the reason to stop the upgrade to 1.19 and rollback to 1.18.2
A full overview of command given, errors seen can be found in the “Other relevant info”
Expected outcome:
The upgrade guide should be reviewed and additional things should be added.
Things missing as far as I can see :
- Installation of foreman-sqlite3
- Some magic to get around the message “API controllers newer than Apipie cache! Run apipie:cache rake task to regenerate cache.” (probably an additional foreman-rake command to run…
Foreman and Proxy versions:
Started from foreman 1.18.2
Foreman and Proxy plugin versions:
Other relevant data:
The server on my side is running Ubuntu 16.04 and was once installed using the foreman-installer on foreman version 1.15.
Complete overview of steps taken for this upgrade :
- Updated /etc/apt/sources.list.d/foreman.list with new version numbers
- Stop apache2 service
- Run “sudo apt update”
- Run “sudo apt-get --only-upgrade install ruby* foreman*”
During this step a warning was given there is a difference between the installed version of /etc/foreman/database.yml and the version in the package :
— /etc/foreman/database.yml 2018-09-17 08:53:39.645978212 +0200
+++ /etc/foreman/database.yml.dpkg-new 2018-08-31 02:40:09.000000000 +0200
@@ -1,10 +1,22 @@
-### File managed with puppet ###
-## Module: ‘foreman’
+# SQLite version 3.x
+# gem install sqlite3
+development:
- adapter: sqlite3
- database: db/development.sqlite3
- pool: 10
- timeout: 5000
+# Warning: The database defined as “test” will be erased and
+# re-generated from your development database when you run “rake”.
+# Do not set this db to the same as development or production.
+test:
- adapter: sqlite3
- database: db/test.sqlite3
- pool: 10
- timeout: 5000
-# Database is managed by foreman::database::postgresql
production:
- adapter: postgresql
- database: foreman
- username: foreman
- password: “XkNykU934UwtbappwTtjnyDrjUA2TC88”
- pool: 5
- adapter: sqlite3
- database: db/production.sqlite3
- pool: 10
- timeout: 5000
- Run “sudo foreman-rake db:migrate”
At this step, the following error occured :
rake aborted!
Gem::LoadError: Specified ‘sqlite3’ for database adapter, but the gem is not loaded. Addgem 'sqlite3'
to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/connection_specification.rb:188:inrescue in spec' /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/connection_specification.rb:185:in
spec’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:880:inestablish_connection' /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_handling.rb:58:in
establish_connection’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/railtie.rb:124:inblock (2 levels) in <class:Railtie>' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:69:in
instance_eval’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:69:inblock in execute_hook' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:60:in
with_execution_control’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:65:inexecute_hook' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:41:in
block in on_load’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:40:ineach' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:40:in
on_load’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/railtie.rb:120:inblock in <class:Railtie>' /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/initializable.rb:30:in
instance_exec’
/usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/initializable.rb:30:inrun' /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/initializable.rb:59:in
block in run_initializers’
/usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/initializable.rb:58:inrun_initializers' /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/application.rb:353:in
initialize!’
/usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/railtie.rb:185:inpublic_send' /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/railtie.rb:185:in
method_missing’
/usr/share/foreman/config/environment.rb:5:in<top (required)>' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in
require’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:inblock in require' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in
load_dependency’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:inrequire' /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/application.rb:329:in
require_environment!’
/usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/application.rb:445:in `block in run_tasks_blocks’Caused by:
Gem::LoadError: sqlite3 is not part of the bundle. Add it to Gemfile.
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:10:in<top (required)>' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in
require’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:inblock in require' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in
load_dependency’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:inrequire' /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/connection_specification.rb:186:in
spec’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:880:inestablish_connection' /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_handling.rb:58:in
establish_connection’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/railtie.rb:124:inblock (2 levels) in <class:Railtie>' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:69:in
instance_eval’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:69:inblock in execute_hook' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:60:in
with_execution_control’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:65:inexecute_hook' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:41:in
block in on_load’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:40:ineach' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:40:in
on_load’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/railtie.rb:120:inblock in <class:Railtie>' /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/initializable.rb:30:in
instance_exec’
/usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/initializable.rb:30:inrun' /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/initializable.rb:59:in
block in run_initializers’
/usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/initializable.rb:58:inrun_initializers' /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/application.rb:353:in
initialize!’
/usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/railtie.rb:185:inpublic_send' /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/railtie.rb:185:in
method_missing’
/usr/share/foreman/config/environment.rb:5:in<top (required)>' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in
require’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:inblock in require' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in
load_dependency’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:inrequire' /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/application.rb:329:in
require_environment!’
/usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/application.rb:445:in `block in run_tasks_blocks’
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)
This was solved by taking an additional step, which is not documented in the upgrade guide :
6. sudo apt install foreman-sqlite3
7. Rerun db:migrate
Now the following messages shows up :
API controllers newer than Apipie cache! Run apipie:cache rake task to regenerate cache.
This message was ignored for the moment.
8. Running “sudo foreman-rake db:seed”, this showed the same warning on the API controllers, also ignored in this case.
9. Running “sudo foreman-rake tmp:cache:clear”
10. Running “sudo foreman-rake db:sessions:clear”
This resulted in the following error :
API controllers newer than Apipie cache! Run apipie:cache rake task to regenerate cache.
rake aborted!
ActiveRecord::StatementInvalid: SQLite3::SQLException: near “TRUNCATE”: syntax error: TRUNCATE TABLE sessions
/usr/share/foreman/vendor/ruby/2.3.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:ininitialize' /usr/share/foreman/vendor/ruby/2.3.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in
new’
/usr/share/foreman/vendor/ruby/2.3.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:inprepare' /usr/share/foreman/vendor/ruby/2.3.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:137:in
execute’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:251:inblock (2 levels) in execute' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies/interlock.rb:46:in
block in permit_concurrent_loads’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/concurrency/share_lock.rb:185:inyield_shares' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies/interlock.rb:45:in
permit_concurrent_loads’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:250:inblock in execute' /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract_adapter.rb:613:in
block (2 levels) in log’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract_adapter.rb:612:inblock in log' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/notifications/instrumenter.rb:21:in
instrument’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract_adapter.rb:604:inlog' /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:249:in
execute’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-session_store-1.1.1/lib/tasks/database.rake:12:in `block (2 levels) in <top (required)>’Caused by:
SQLite3::SQLException: near “TRUNCATE”: syntax error
/usr/share/foreman/vendor/ruby/2.3.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:ininitialize' /usr/share/foreman/vendor/ruby/2.3.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in
new’
/usr/share/foreman/vendor/ruby/2.3.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:inprepare' /usr/share/foreman/vendor/ruby/2.3.0/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:137:in
execute’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:251:inblock (2 levels) in execute' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies/interlock.rb:46:in
block in permit_concurrent_loads’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/concurrency/share_lock.rb:185:inyield_shares' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/dependencies/interlock.rb:45:in
permit_concurrent_loads’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:250:inblock in execute' /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract_adapter.rb:613:in
block (2 levels) in log’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract_adapter.rb:612:inblock in log' /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/notifications/instrumenter.rb:21:in
instrument’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract_adapter.rb:604:inlog' /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/sqlite3_adapter.rb:249:in
execute’
/usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-session_store-1.1.1/lib/tasks/database.rake:12:in `block (2 levels) in <top (required)>’
Tasks: TOP => db:sessions:clear
(See full trace by running task with --trace)
At this point I decided to rollback the snapshot I created and stop the upgrade…