jak używać RethinkDB z Phoenixframework?

Po przybyciu do Elixir / Phoenix chcę użyć RethinkDB zamiast PostgreSQL, ale znajduję tylko dokumentację / przykłady w PostgreSQL (która wydaje się być domyślną/oficjalną bazą danych). Istnieje bardzo dobry pakiet z Hamiltopa (Rethinkdb-elixir), ale niestety dokumentacja w Wiki nie jest gotowa, a w Readme mi nie wystarcza. Absolutnie nie chcę używać SQL (pochodzę z Meteor / MongoDB, gdzie baza danych nie była problemem). Czy ktoś może mi pokazać prosty przykład o kodzie muszę:

  1. Połącz się z RethinkDB;
  2. Uruchom serwer / Zarządzaj serwerem / połączeniami;
  3. Tworzenie bazy danych / tabeli;
  4. wykonywanie podstawowych operacji CRUD.

To może zabrzmieć głupio, ale ponieważ Meteor zajął się tym za nas, teraz jest to problem dla mnie...bo nie jestem w stanie zrobić tego właściwie.Dzięki!

Author: IgorekPotworek, 2015-07-16

1 answers

Krok 1) Wygeneruj Projekt bez ecto:

mix phoenix.new some_app --no-ecto

Krok 2) Dodaj rethinkdb jako zależność w mix.exs

defp deps do
  [{:phoenix, "~> 0.13.1"},
   {:phoenix_html, "~> 1.0"},
   {:phoenix_live_reload, "~> 0.4", only: :dev},
   {:rethinkdb, "~> 0.0.5"},
   {:cowboy, "~> 1.0"}]
end

Krok 3) Uruchom mix deps.get

Krok 4) Utwórz bazę danych:

defmodule SomeApp.Database do
  use RethinkDB.Connection
end

Krok 5) dodaj go do swojego drzewa nadzoru w lib/some_app.ex - name powinien pasować do twojego modułu bazy danych powyżej (SomeApp.Database)

def start(_type, _args) do
  import Supervisor.Spec, warn: false

  children = [
    # Start the endpoint when the application starts
    supervisor(SomeApp.Endpoint, []),
    worker(RethinkDB.Connection, [[name: SomeApp.Database, host: 'localhost', port: 28015]]) 
    # Here you could define other workers and supervisors as children
  ]

  # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
  # for other strategies and supported options
  opts = [strategy: :one_for_one, name: Rethink.Supervisor]
  Supervisor.start_link(children, opts)
end

Krok 6) wykonaj zapytanie:

defmodule Rethink.PageController do
  use Rethink.Web, :controller
  use RethinkDB.Query

  plug :action

  def index(conn, _params) do
    table_create("people")
    |> SomeApp.Database.run
    |> IO.inspect

    table("people")
    |> insert(%{first_name: "John", last_name: "Smith"})
    |> SomeApp.Database.run
    |> IO.inspect

    table("people")
    |> SomeApp.Database.run
    |> IO.inspect
    render conn, "index.html"
  end
end

Proszę zauważyć: umieściłem zapytania w PageController tylko dla ułatwienia działania. W prawdziwym przykładzie, te będzie w osobnym module-może takim, który reprezentuje Twój zasób.

Kolejną rzeczą do odnotowania jest to, że tworzę tabelę inline na kontrolerze. Możesz wykonać polecenie, aby utworzyć tabelę w pliku takim jak priv/migrations/create_people.exs i uruchomić ją za pomocą mix run priv/migrations/create_people.exs

 23
Author: Gazler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-17 17:57:28