elixir - ¿Cómo usar RethinkDB con Phoenixframework?
phoenix-framework ecto (1)
Paso 1) Generar proyecto sin ecto:
mix phoenix.new some_app --no-ecto
Paso 2) Agregue rethinkdb como una dependencia en 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
Paso 3) Ejecutar mix deps.get
Paso 4) Crea una base de datos:
defmodule SomeApp.Database do
use RethinkDB.Connection
end
Paso 5) lib/some_app.ex
a su árbol de supervisión en lib/some_app.ex
: el name
debe coincidir con el módulo de su base de datos anterior ( 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
Paso 6) Ejecutar una consulta:
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
Tenga en cuenta: He puesto las consultas en el PageController solo por la facilidad de ejecución. En un ejemplo real, estos estarían en un módulo separado, tal vez uno que represente su recurso.
La otra cosa a tener en cuenta es que estoy creando la tabla en línea en el controlador. Puede ejecutar el comando para crear una tabla en un archivo como priv/migrations/create_people.exs
y ejecutarlo con mix run priv/migrations/create_people.exs
Habiendo llegado a Elixir / Phoenix, quiero usar RethinkDB en lugar de PostgreSQL, pero solo encuentro documentación / ejemplos en PostgreSQL (que parece ser la base de datos predeterminada / oficial). Hay un muy buen paquete de Hamiltop (Rethinkdb-elixir) pero desafortunadamente la documentación en el Wiki no está lista y en el Léame no es suficiente para mí. Absolutamente no quiero usar SQL (vine de usar Meteor / MongoDB donde la base de datos no fue un problema). ¿Puede alguien mostrarme un ejemplo sencillo del código que necesito para:
- Conectar a RethinkDB;
- Iniciar el servidor / administrar el servidor / conexiones;
- Crear una base de datos / tabla;
- Realizar operaciones básicas de CRUD.
Esto podría sonar tonto, pero como Meteor se encargó de esto, ahora es un problema para mí ... porque no puedo hacerlo correctamente. ¡Gracias!