Merge pull request #479 from FarmBot/staging

Recovery release to fix FarmEvents not working without a sync.
pull/489/head v6.3.1
Connor Rigby 2018-03-21 21:16:22 -07:00 committed by GitHub
commit acc22702af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 58 additions and 21 deletions

View File

@ -1,2 +1,2 @@
erlang 20.3.1
elixir 1.6.3
erlang 20.2
elixir 1.6.4

View File

@ -1,3 +1,6 @@
# 6.3.1
* Fix bug causing FarmEvents not to work.
# 6.3.0
* Update system update system.
* Rename and refactor external resources internally so they are more readable in the codebase.

View File

@ -1 +1 @@
6.3.0
6.3.1

View File

@ -36,7 +36,7 @@ config :farmbot, Farmbot.Repo.A,
config :farmbot, Farmbot.Repo.B,
adapter: Sqlite.Ecto2,
loggers: [],
database: "tmp/#{Farmbot.Repo.A}_dev.sqlite3",
database: "tmp/#{Farmbot.Repo.B}_dev.sqlite3",
pool_size: 1
config :farmbot, Farmbot.System.ConfigStorage,

View File

@ -18,6 +18,7 @@ defmodule Farmbot.System.Init.Ecto do
repos = Application.get_env(:farmbot, :ecto_repos)
for repo <- repos do
Application.put_env(:farmbot, :repo_hack, repo)
setup(repo)
end
end
@ -50,8 +51,10 @@ defmodule Farmbot.System.Init.Ecto do
@doc "Replacement for Mix.Tasks.Ecto.Migrate"
def migrate do
repos = Application.get_env(:farmbot, :ecto_repos)
Application.put_env(:farmbot, :repo_hack, nil)
for repo <- repos do
Application.put_env(:farmbot, :repo_hack, repo)
# setup(repo)
migrate(repo)
end
@ -62,24 +65,14 @@ defmodule Farmbot.System.Init.Ecto do
{:ok, pid, apps} = Mix.Ecto.ensure_started(repo, opts)
migrator = &Ecto.Migrator.run/4
migrations_path =
(Application.get_env(:farmbot, repo)[:priv] ||
Path.join(
:code.priv_dir(:farmbot) |> to_string,
Module.split(repo) |> List.last() |> Macro.underscore()
))
Path.join(
:code.priv_dir(:farmbot) |> to_string,
Module.split(repo) |> List.last() |> Macro.underscore()
)
|> Kernel.<>("/migrations")
pool = repo.config[:pool]
migrated =
if function_exported?(pool, :unboxed_run, 2) do
pool.unboxed_run(repo, fn -> migrator.(repo, migrations_path, :up, opts) end)
else
migrator.(repo, migrations_path, :up, opts)
end
migrated = migrator.(repo, migrations_path, :up, opts)
pid && repo.stop(pid)
Mix.Ecto.restart_apps_if_migrated(apps, migrated)
Process.sleep(500)

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Repo.A.Migrations.AddDevicesTable do
defmodule Farmbot.Repo.Migrations.AddDevicesTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Repo.A.Migrations.AddSensorsTable do
defmodule Farmbot.Repo.Migrations.AddSensorsTable do
use Ecto.Migration
def change do

View File

@ -0,0 +1,41 @@
defmodule Farmbot.Repo.Migrations.FixNamespaces do
use Ecto.Migration
import Ecto.Query
def change do
repo = Application.get_env(:farmbot, :repo_hack)
if repo do
do_update(repo)
else
IO.puts "Not migrating."
end
end
defp do_update(repo) do
fe_needs_change = repo.all(from e in Farmbot.Asset.FarmEvent)
|> Enum.filter(fn(asset) ->
String.contains?(asset.executable_type, "Repo")
end)
fe_needs_change |> Enum.map(fn(a) ->
String.split(a.executable_type, ".") |> List.last
Ecto.Changeset.change(a, executable_type: String.split(a.executable_type, ".") |> List.last)
end) |> Enum.map(fn(cs) -> repo.update!(cs) end)
|> fn(updated) ->
IO.puts "FarmEvents updated: #{Enum.count(updated)}\n\n\n"
end.()
point_needs_change = repo.all(from p in Farmbot.Asset.Point)
|> Enum.filter(fn(asset) ->
String.contains?(asset.pointer_type, "Repo")
end)
point_needs_change |> Enum.map(fn(a) ->
String.split(a.pointer_type, ".") |> List.last
Ecto.Changeset.change(a, pointer_type: String.split(a.pointer_type, ".") |> List.last)
end) |> Enum.map(fn(cs) -> repo.update!(cs) end)
|> fn(updated) ->
IO.puts "Points updated: #{Enum.count(updated)}"
end.()
end
end