I'm following this guide for getting started with hanami
:
https://guides.hanamirb.org/v2.0/introduction/getting-started/
Rather than using ROM, I prefer Sequel, but I stumble upon the persistancy :
https://guides.hanamirb.org/v2.0/introduction/getting-started/#persisting-books
In my gemfile
, I use sequel
and pg
instead of rom
.
I added this to config/app.rb
:
require "sequel"
and config/providers/persistence.rb
contains this:
Hanami.app.register_provider :persistence, namespace: true do
prepare do
#config = ROM::Configuration.new(:sql, target["settings"].database_url)
config = DB = Sequel.connect(database_url)
register "config", config
register "db", config.gateways[:default].connection
end
start do
config = target["persistence.config"]
# config.auto_registration(
# target.root.join("lib/bookshelf/persistence"),
# namespace: "Bookshelf::Persistence"
# )
register "sequel", DB
end
end
config/settings.rb
:
module Bookshelf
class Settings < Hanami::Settings
# Define your app settings here, for example:
#
# setting :my_flag, default: false, constructor: Types::Params::Bool
setting :database_url, constructor: Types::String
end
end
and finally, the database_url is defined in a .env
and and .env.test
file.
# .env
DATABASE_URL=postgres://thiebo@localhost:5432/bookshelf_development
Running this from the hanami console works fine:
moi@Hugo bookshelf % bundle exec hanami console
bookshelf[development]> Hanami.app["settings"].database_url
=> "postgres://moi@localhost:5432/bookshelf_development"
bookshelf[development]>
Sequel allows for migrations to be run as a rake task: http://sequel.jeremyevans.net/rdoc/files/doc/migration_rdoc.html#label-Running+migrations+from+a+Rake+task
My Rakefile:
require "sequel"
namespace :db do
desc "Run migrations"
task :migrate, [:version] do |t, args|
require "sequel/core"
Sequel.extension :migration
version = args[:version].to_i if args[:version]
Sequel.connect(ENV.fetch("DATABASE_URL")) do |db|
Sequel::Migrator.run(db, "db/migrations", target: version)
end
end
end
however... when I run try to run that migration from the console, as per Sequel documentation :
thiebo@Hugo bookshelf % rake db:migrate
rake aborted!
KeyError: key not found: "DATABASE_URL"
/Users/thiebo/bookshelf/Rakefile:12:in `fetch'
/Users/thiebo/bookshelf/Rakefile:12:in `block (2 levels) in <top (required)>'
/Users/thiebo/.rvm/gems/ruby-3.0.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/Users/thiebo/.rvm/gems/ruby-3.0.0/bin/ruby_executable_hooks:22:in `eval'
/Users/thiebo/.rvm/gems/ruby-3.0.0/bin/ruby_executable_hooks:22:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
(it also doesn't work with database_url
instead of DATABASE_URL
. Same error...)