刚到Elixir / Phoenix时,我想使用RethinkDB而不是PostgreSQL,但是我只在PostgreSQL(这似乎是默认/官方数据库)上找到文档/示例。 Hamiltop有一个非常好的软件包(Rethinkdb-elixir),但是不幸的是Wiki中的文档还没有准备好,自述文件对我来说还不够。
我绝对不想使用SQL(我来自使用Meteor / MongoDB,而数据库不是问题)。
谁能给我看一个我需要的简单代码示例:
连接到RethinkDB;
启动服务器/管理服务器/连接;
创建一个数据库/表;
执行基本的CRUD操作。
这听起来可能很愚蠢,但由于Meteor为我们照顾了这些问题,现在这对我来说是个问题...因为我无法正确地做到这一点。谢谢!
最佳答案
步骤1)生成没有ecto的项目:
mix phoenix.new some_app --no-ecto
步骤2)将rethinkdb添加为
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
步骤3)运行
mix deps.get
步骤4)建立资料库:
defmodule SomeApp.Database do
use RethinkDB.Connection
end
步骤5)将其添加到
lib/some_app.ex
中的监视树中-name
应该与上面的数据库模块(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
步骤6)执行查询:
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
请注意:为了方便运行,我将查询放在PageController中。在一个真实的示例中,它们将在单独的模块中-可能代表您的资源。
还要注意的另一件事是,我正在控制器上内联创建表。您可以执行命令以在文件中创建表,例如
priv/migrations/create_people.exs
并使用mix run priv/migrations/create_people.exs
运行它关于elixir - 如何在Phoenixframework中使用RethinkDB?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31457945/