-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
update paas/django -> connect-to-dbs
- Loading branch information
1 parent
30c7084
commit 64c7980
Showing
13 changed files
with
898 additions
and
547 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,117 +11,166 @@ import Link from "next/link"; | |
import NextPage from "@/components/Common/nextpage"; | ||
|
||
<Layout> | ||
# اتصال به دیتابیس ElasticSearch در برنامههای Laravel | ||
# اتصال به دیتابیس ElasticSearch در برنامههای Django | ||
<hr className="mb-2" /> | ||
|
||
برای اتصال به دیتابیس ElasticSearch، در ابتدا، باید با اجرای دستور زیر، پکیج موردنیاز آن را در پروژه خود در Local، نصب کنید: | ||
|
||
برای اتصال به دیتابیس ElasticSearch در برنامههای Django، در ابتدا باید ماژول مربوط به آنرا با اجرای دستور زیر، نصب کنید: | ||
|
||
<div className="h-2" /> | ||
<div dir='ltr'> | ||
<Highlight className="bash"> | ||
{`composer require elasticsearch/elasticsearch`} | ||
{`pip install elasticsearch`} | ||
</Highlight> | ||
</div> | ||
<div className="h-2" /> | ||
در ادامه، باید در دایرکتوری <Important>app</Important> یک دایرکتوری به نام <Important>Services</Important> و درون این دایرکتوری، | ||
یک فایل به نام <Important>ElasticsearchService.php</Important> ایجاد کنید و محتوای زیر را، درون آن، قرار دهید: | ||
|
||
سپس، در فایل <Important>settings.py</Important>، تنظیمات مربوط به دیتابیس را اضافه کنید: | ||
<div className="h-2" /> | ||
<div dir='ltr'> | ||
<Highlight className="php"> | ||
{`<?php | ||
namespace App\\Services; | ||
use Elastic\\Elasticsearch\\ClientBuilder; | ||
class ElasticsearchService | ||
{ | ||
protected $client; | ||
public function __construct() | ||
{ | ||
$this->client = ClientBuilder::create() | ||
->setHosts(['http://elastic:[email protected]:30197']) | ||
->build(); | ||
} | ||
public function checkConnection() | ||
{ | ||
return $this->client->ping(); | ||
} | ||
<Highlight className="python"> | ||
{` # other codes ... | ||
ELASTICSEARCH_DSL = { | ||
'default': { | ||
'hosts': os.getenv("ELASTICSEARCH_URI"), | ||
}, | ||
} | ||
`} | ||
# other codes ...`} | ||
</Highlight> | ||
</div> | ||
<div className="h-2" /> | ||
|
||
<Alert variant='info'> | ||
<p> | ||
در کد فوق، باید مقدار فیلد <Important>setHosts</Important> را برابر با آدرس URI دیتابیس ElasticSearch خود، قرار دهید. | ||
</p> | ||
</Alert> | ||
|
||
تمامی کارها انجام شده است و شما میتوانید از دیتابیس ElasticSearch خود استفاده کنید؛ به عنوان مثال میتوانید با اجرای دستور زیر، یک کنترلر برای تست اتصال به دیتابیس ایجاد کنید: | ||
در ادامه، بایستی طبق مستندات <a href="../../../details/envs" className="blue-link">تنظیم متغیرهای محیطی</a>، متغیرهای مربوط به دیتابیس خود را، به برنامه، اضافه کنید؛ به عنوان مثال: | ||
<div className="h-2" /> | ||
<div dir='ltr'> | ||
<Highlight className="bash"> | ||
{`ELASTICSEARCH_URI=http://elastic:[email protected]:328`} | ||
</Highlight> | ||
</div> | ||
<div className="h-2" /> | ||
|
||
در نهایت، کافیست دستور زیر را اجرا کنید تا فایل <Important>requirements.txt</Important> بهروز شود و نام ماژول مربوط به دیتابیس، در این فایل، قرار بگیرد: | ||
<div className="h-2" /> | ||
<div dir='ltr'> | ||
<Highlight className="bash"> | ||
{`pip freeze > requirements.txt`} | ||
</Highlight> | ||
</div> | ||
<div className="h-2" /> | ||
|
||
تمامی کارها انجام شده است و شما میتوانید از دیتابیس خود استفاده کنید. به عنوان مثال، میتوانید با اجرای دستور زیر، یک application جدید ایجاد کنید: | ||
<div className="h-2" /> | ||
<div dir='ltr'> | ||
<Highlight className="bash"> | ||
{`php artisan make:controller ElasticsearchController`} | ||
{`python manage.py startapp elasticsearch_app`} | ||
</Highlight> | ||
</div> | ||
<div className="h-2" /> | ||
اکنون، میتوانید کنترلر ایجاد شده در مسیر <Important>app/Http/Controllers/ElasticsearchController.php</Important> را با قطعه کد زیر، آپدیت کنید: | ||
|
||
سپس، این application جدید را به بخش <Important>INSTALLED_APPS</Important> در <Important>settings.py</Important>، اضافه کنید: | ||
<div className="h-2" /> | ||
<div dir='ltr'> | ||
<Highlight className="php"> | ||
{`<?php | ||
<Highlight className="python"> | ||
{`# Application definition | ||
INSTALLED_APPS = [ | ||
'django.contrib.admin', | ||
'django.contrib.auth', | ||
'django.contrib.contenttypes', | ||
'django.contrib.sessions', | ||
'django.contrib.messages', | ||
'django.contrib.staticfiles', | ||
'elasticsearch_app', # add this | ||
]`} | ||
</Highlight> | ||
</div> | ||
<div className="h-2" /> | ||
|
||
در ادامه، در دایرکتوری <Important>elasticsearch_app</Important>، یک فایل جدید به نام <Important>elastic_model.py</Important> ایجاد کنید و قطعه کد زیر را درون آن، قرار دهید: | ||
<div className="h-2" /> | ||
<div dir='ltr'> | ||
<Highlight className="python"> | ||
{`from elasticsearch import Elasticsearch | ||
from django.conf import settings | ||
namespace App\\Http\\Controllers; | ||
class ElasticModel: | ||
def __init__(self): | ||
self.client = Elasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts']) | ||
self.index = 'test_index' | ||
use App\\Services\\ElasticsearchService; | ||
use Illuminate\\Http\\Request; | ||
def create_index(self): | ||
if not self.client.indices.exists(index=self.index): | ||
self.client.indices.create(index=self.index) | ||
class ElasticsearchController extends Controller | ||
{ | ||
protected $elasticsearchService; | ||
def insert_data(self, data): | ||
self.client.index(index=self.index, document=data) | ||
def read_data(self): | ||
response = self.client.search(index=self.index, body={"query": {"match_all": {}}}) | ||
return response['hits']['hits'] | ||
`} | ||
</Highlight> | ||
</div> | ||
<div className="h-2" /> | ||
|
||
public function __construct(ElasticsearchService $elasticsearchService) | ||
{ | ||
$this->elasticsearchService = $elasticsearchService; | ||
} | ||
|
||
public function checkConnection() | ||
{ | ||
$isConnected = $this->elasticsearchService->checkConnection(); | ||
|
||
if ($isConnected) { | ||
return response()->json(['message' => 'Connected to Elasticsearch'], 200); | ||
} else { | ||
return response()->json(['message' => 'Failed to connect to Elasticsearch'], 500); | ||
} | ||
در ادامه، در فایل <Important>elasticsearch_app/views.py</Important> قطعه کد زیر را وارد کنید تا اتصال به دیتابیس، بررسی شود: | ||
<div className="h-2" /> | ||
<div dir='ltr'> | ||
<Highlight className="python"> | ||
{`from django.http import JsonResponse | ||
from .elastic_model import ElasticModel | ||
def elasticsearch_insert_read(request): | ||
es_model = ElasticModel() | ||
es_model.create_index() | ||
# Insert data | ||
data = { | ||
'name': 'Sample Data', | ||
'description': 'This is a sample data entry for Elasticsearch.' | ||
} | ||
} | ||
es_model.insert_data(data) | ||
# Read data | ||
results = es_model.read_data() | ||
return JsonResponse(results, safe=False) | ||
`} | ||
</Highlight> | ||
</div> | ||
<div className="h-2" /> | ||
|
||
سپس، بایستی در دایرکتوری <Important>elasticsearch_app</Important>، یک فایل به نام <Important>urls.py</Important> ایجاد کنید و قطعه کد زیر را درون آن، قرار دهید: | ||
|
||
در نهایت، کافیست تا در <Important>routes/web.php</Important> قطعه کد زیر را اضافه کنید: | ||
<div className="h-2" /> | ||
<div dir='ltr'> | ||
<Highlight className="python"> | ||
{`from django.urls import path | ||
from .views import elasticsearch_insert_read | ||
urlpatterns = [ | ||
path('', elasticsearch_insert_read, name='elasticsearch_insert_read'), | ||
] | ||
`} | ||
</Highlight> | ||
</div> | ||
<div className="h-2" /> | ||
|
||
در نهایت، میتوانید در فایل <Important>urls.py</Important> موجود در دایرکتوری اصلی پروژه، قطعه کد زیر را اضافه کنید: | ||
<div className="h-2" /> | ||
<div dir='ltr'> | ||
<Highlight className="php"> | ||
{`use App\\Http\\Controllers\\ElasticsearchController; | ||
<Highlight className="python"> | ||
{`from django.urls import include, path | ||
Route::get('/check-elasticsearch', [ElasticsearchController::class, 'checkConnection']); | ||
urlpatterns = [ | ||
path('elasticsearch/', include('elasticsearch_app.urls')), | ||
] | ||
`} | ||
</Highlight> | ||
</div> | ||
<div className="h-2" /> | ||
اکنون میتوانید برنامهتان را در لیارا مستقر کرده و در صفحه <Important>check-elasticsearch/</Important> وضعیت اتصال به دیتابیس خود را بررسی کنید. | ||
|
||
اکنون میتوانید برنامهتان را در لیارا مستقر کرده و در صفحه <Important>elasticsearch/</Important> وضعیت اتصال به دیتابیس خود را بررسی کنید. | ||
|
||
</Layout> |
Oops, something went wrong.