OH! Very cool. No cycles. Did NOT realize that tool had a distinction between runtime and compile. Thank you!
Whatâs the status of AshSqlite re: the v3 update? Is it the same âpoint your mix file at GH and give it a try, but be aware there may be issuesâ situation as Ash v3 itself, or is the SQLite support further behind?
(Thereâs this which seems promising, but I wanted to check directly before ploughing ahead)
All of the packages including ash_sql support ash 3.0 on their latest releases(no need for pointing at GitHub) Some packages(like ash_sql) added support in a release candidate(also on hex)
As for the status, some small issues here and there, but otherwise 3.0 is stable and ready to mingle
Just did my first migrations since the upgrade. I didnât see anything about changes to migrations in the guide, or a change in uuid fields.
EDIT: I now see breaking changes listed here: ash_postgres/CHANGELOG.md at main · ash-project/ash_postgres · GitHub and now see the file ash_postgres/documentation/topics/development/upgrading-to-2.0.md at main · ash-project/ash_postgres · GitHub which explains all this. Fix the link the ash upgrade to point here.
Every resource had this in the migration file:
alter table(:my_resource) do
modify :updated_at, :utc_datetime_usec, default: fragment("(now() AT TIME ZONE 'utc')")
modify :created_at, :utc_datetime_usec, default: fragment("(now() AT TIME ZONE 'utc')")
modify :id, :uuid, default: fragment("gen_random_uuid()")
end
And all indexes are recreated in the up
Nothing special about all the resources, those fields look like:
attributes do
uuid_primary_key :id
create_timestamp :created_at
update_timestamp :updated_at
end
The migration fails with:
** (Postgrex.Error) ERROR 42883 (undefined_function) function gen_random_uuid() does not exist
hint: No function matches the given name and argument types. You might need to add explicit type casts.
(ecto_sql 3.11.1) lib/ecto/adapters/sql.ex:1054: Ecto.Adapters.SQL.raise_sql_call_error/1
(elixir 1.16.2) lib/enum.ex:1700: Enum."-map/2-lists^map/1-1-"/2
(ecto_sql 3.11.1) lib/ecto/adapters/sql.ex:1161: Ecto.Adapters.SQL.execute_ddl/4
(ecto_sql 3.11.1) lib/ecto/migration/runner.ex:348: Ecto.Migration.Runner.log_and_execute_ddl/3
(elixir 1.16.2) lib/enum.ex:1700: Enum."-map/2-lists^map/1-1-"/2
(ecto_sql 3.11.1) lib/ecto/migration/runner.ex:311: Ecto.Migration.Runner.perform_operation/3
(stdlib 5.2.1) timer.erl:270: :timer.tc/2
(ecto_sql 3.11.1) lib/ecto/migration/runner.ex:25: Ecto.Migration.Runner.run/8
Canât find anything in the docs related to this change.
Looked at an old migration, and id
was:
add :id, :uuid, null: false, default: fragment("uuid_generate_v4()"), primary_key: true
(FYI, https://github.com/ash-project/ash_postgres/blob/main/documentation/how_to/upgrade.md is a 404, but that link is in the upgrade guide)
The upgrade guide has been fixed, thanks for reporting the issue.
Just to clarify, does that include ash_sqlite
? Because I have this in my mix.exs
:
# ...
{:ash, "~> 3.0.0-rc.21"},
{:ash_sqlite, "~> 0.1.1"},
{:ash_phoenix, "~> 2.0.0-rc.4"},
# ...
and I get an error:
Because every version of ash_sqlite depends on ash >= 2.15.12 and < 3.0.0-0 and your app depends on ash ~> 3.0.0-rc.21, no version of ash_sqlite is allowed.
In short, I want to try the v3 RCs, but with sqlite instead of postgres. Is that doable?
Looking at the repo I think ash_sqlite
doesnât have a RC yet, so for now you could try pointing to main
on Github until it gets tagged
{:ash_sqlite, github: "ash-project/ash_sqlite"},
Didnât realize. Will publish one today
Want to give Ash a try for my next project. As I rather not migrate a month into the project and learning âthe old wayâ, I rather start fresh at 3.0 RC. However, documentation does not up to date yet, or is it?
This is just some left over wording. I will address. The documentation is being overhauled. With rare exception, it should be up to date everywhere, anything like that you find is essentially a documentation bug.
Feel free to open any issues for things like that?
Now I know it should be up to date Iâll raise an issues (or PR) when found. Thanks for the rapid response.
do the live book tutorials work with Ash 3.0 ?
I am getting
** (Ash.Error.Framework) Framework Error
* Tutorial.Support.Ticket.assign must be performed atomically, but it could not be
Reason: cannot atomically manage relationships
See https://hexdocs.pm/ash/3.0.0-rc.15/update-actions.html#atomic-updates for more on atomics.
(elixir 1.15.7) lib/process.ex:860: Process.info/2
(ash 3.0.0-rc.33) lib/ash/error/framework/must_be_atomic.ex:5: Ash.Error.Framework.MustBeAtomic.exception/1
(ash 3.0.0-rc.33) lib/ash/actions/update/update.ex:170: Ash.Actions.Update.run/4
(ash 3.0.0-rc.33) lib/ash.ex:2447: Ash.update/2
(ash 3.0.0-rc.33) lib/ash.ex:2408: Ash.update!/2
(elixir 1.15.7) src/elixir.erl:396: :elixir.eval_external_handler/3
(stdlib 5.1.1) erl_eval.erl:750: :erl_eval.do_apply/7
(elixir 1.15.7) src/elixir.erl:375: :elixir.eval_forms/4
(elixir 1.15.7) lib/process.ex:860: Process.info/2
this is from 9 - Managing relationships.
An, right this is a consequence of a recent change to support atomics in ETS. I will update the tutorial. Are there any other broken places that you saw?
Okay, Iâve addressed this in the tutorial. Specifically, Iâve removed the need to use manage_relationship
at all in the Livebook tutorial, and therefore all of the actions are atomic safe Would you mind taking a look to see what you think?
So the tutorial works now.
Thanks for this
I think there is a need for a âshowcaseâ repo / livebook depicting various use cases for many-many
relationships. especially, showcasing manage_relationship
â that is most common use case where I get stuck frequently.
Here are a few scenarios I have come across. Feel free to add more to the list.
- user many-many orgs
through
user_orgs
user_orgs has keys :user_role
+ user_id
+ org_id
A. when deleting user â delete from user_orgs but donât delete orgs
B. when deleting user â also delete user_orgs and orgs
C. when creating user â also create org and pass the user_role
in manage_relationship
- artist many-many album
through
artist_album
album many-many songsthrough
album_songs
A. create_song_with_artist_and_album
â takes song attributes and artist_id, album_id to manage those
as of now, hooking into after_action
has been a goto strategy to make these work. But ideally, I would love to understand how can I achieve the same using manage_relationship
.
Agreed! Please add these suggestions to the documentation overhaul community suggestions issue if you donât mind: Community suggestions for documentation overhaul · Issue #995 · ash-project/ash · GitHub
Will do!
Dinât know there was a tracker somewhere !