Windows Powershell Script To Reset An Ecto DB

For those few of us that work on Elixir on Windows, here’s a little utility powershell script I hacked together to reset my database. I constantly had to reset both dev and test so I set up the script such that I could pass the environment to be reset on the command line. Hope others may find this helpful:

param([string]$environment="test") #default to test environment

if($environment -eq "prod"){
   Throw "You cannot run this script against the prod evironment. You must initialize prod manually"
}

$env:MIX_ENV = $environment
mix ecto.drop
mix ecto.create
mix ecto.migrate
Remove-Item Env:\MIX_ENV #Reset the environment setting.

You would use it like so: ./dbinit dev or ./dbinit test

4 Likes

You can also do it all completely within mix by writing a little mix task that sets the mix environment even then you could have an alias set it to dev, reset, then set it to test and reset again if you want for a meta-resetter.

I would personally still just do:

mix ecto.reset
MIX_ENV=test mix ecto.reset

Maybe alias it like:

alias ecto-reset='mix ecto.reset; MIX_ENV=test mix ecto.reset'

Or via the New-Alias command in powershell however it works.

Yes I work on elixir on Windows at work (debian at home) too… >.>
I installed bash though.

I’m conflicted in regards to installing bash on Windows. Yes, it’s a lot better shell environment than anything else available on Windows but I’d rather not be working on Windows anyway :slight_smile: Plus I mostly end up working on stuff that others will have to support and it’s hard enough to find Win devs who can even cope with Powershell much less coping with bash on Windows.

I know how that feels. :wink:

I use both bash and powershell, they each have their perks. For working with windows objects powershell is certainly better by far. However I can pump out little things in bash far faster (something simple like finding all files of a type in a directory tree then matching a regex inside of them to get a list of matchers is definitely longer and more unwieldy to type in powershell than bash by far). Right now I have one powershell window and 4 bash windows. Though for anything that needs to last longer than something ephemeral I generally write it in Elixir. Elixir actually makes for a really easy scripting language for the people here. We have quickly turned into an Elixir shop (one of the reasons they hired me was my almost 10 years of erlang spare-time work). :slight_smile: