Skip to content

Commit

Permalink
update paas/django -> connect-to-dbs
Browse files Browse the repository at this point in the history
  • Loading branch information
A-Najmabadi committed Jul 11, 2024
1 parent 30c7084 commit 64c7980
Show file tree
Hide file tree
Showing 13 changed files with 898 additions and 547 deletions.
34 changes: 29 additions & 5 deletions src/components/Sidebar/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -1363,6 +1363,14 @@ export default {
{
hr: true
},
{
badge: (
<div className="flex items-center gap-2">
<GoPaperclip />
برنامه‌های مرتبط
</div>
)
},
{
title: "Lumen",
icon: <IconContainer alt="laravel" />,
Expand Down Expand Up @@ -1531,6 +1539,14 @@ export default {
{
hr: true
},
{
badge: (
<div className="flex items-center gap-2">
<GoPaperclip />
برنامه‌های مرتبط
</div>
)
},
{
title: "Yii",
icon: <IconContainer alt="yii" />,
Expand Down Expand Up @@ -1649,13 +1665,9 @@ export default {
)
},
{
title: "دیتابیس MySQL",
title: "دیتابیس MySQL/MariaDB",
link: "/paas/django/how-tos/connect-to-db/mysql"
},
{
title: "دیتابیس MariaDB",
link: "/paas/django/how-tos/connect-to-db/mariadb"
},
{
title: "دیتابیس MSSQL",
link: "/paas/django/how-tos/connect-to-db/mssql"
Expand All @@ -1676,6 +1688,10 @@ export default {
title: "دیتابیس ElasticSearch",
link: "/paas/django/how-tos/connect-to-db/elastic-search"
},
{
title: "دیتابیس MongoDB",
link: "/paas/django/how-tos/connect-to-db/mongodb"
},
{
hr: true
},
Expand Down Expand Up @@ -1706,6 +1722,14 @@ export default {
{
hr: true
},
{
badge: (
<div className="flex items-center gap-2">
<GoPaperclip />
برنامه‌های مرتبط
</div>
)
},
{
title: "Celery",
icon: <IconContainer alt="celery" />,
Expand Down
7 changes: 4 additions & 3 deletions src/pages/paas/django/fix-common-errors/about.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import NextPage from "@/components/Common/nextpage";
import {GoArrowLeft,} from "react-icons/go";

<Layout>
# رفع خطاهای رایج در استقرار برنامه‌های Laravel
# رفع خطاهای رایج در استقرار برنامه‌های Django
<hr className="mb-2" />
در فرآیند استقرار برنامه‌های خود ممکن است با خطاهای مختلفی مواجه شوید. این خطاها می‌توانند ناشی از اشتباهات کوچک در تنظیمات سرور، پیکربندی‌های نادرست، یا عدم هماهنگی بین نسخه‌های مختلف ابزارها و کتابخانه‌ها باشند. حتی با داشتن مستندات کامل و دقیق، این مشکلات می‌توانند رخ دهند و اغلب نیز به سادگی قابل حل هستند.
<div className='h-2' />
Expand All @@ -23,9 +23,10 @@ import {GoArrowLeft,} from "react-icons/go";
<div className='h-2' />
<div className="grid grid-cols-1 gap-4">
{[
{ platform: 'رفع خطای محدودیت آپلود فایل با حجم بیش از 100MB', link: "./upload-limit-size" },
{ platform: 'رفع خطای محدودیت آپلود فایل با حجم بیش از 1MB', link: "./upload-limit-size" },
{ platform: 'رفع خطای CORS', link: "./cors" },
{ platform: 'رفع خطای 419Page Expired', link: "./419-page-expired" },
{ platform: 'رفع خطای CORS فایل‌های Media', link: "./cors-media" },
{ platform: 'رفع خطای WORKER TIMEOUT', link: "./worker-timeout" },
].map(item =>
<Link href={item.link}>
<Card className="flex cursor-pointer w-full items-center justify-between">
Expand Down
22 changes: 10 additions & 12 deletions src/pages/paas/django/how-tos/connect-to-db/about.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@ import {GoArrowLeft,} from "react-icons/go";
<hr className="mb-2" />

دیتابیس‌ها، در اکوسیستم یک پلتفرم، نقش حیاتی دارند. دیتابیس‌ها نه تنها محلی برای ذخیره و بازیابی داده‌ها هستند، بلکه به عنوان ستون فقرات یک برنامه، عمل می‌کنند و بر کارایی، مقیاس‌پذیری و قابلیت اعتماد سیستم، تأثیر مستقیم می‌گذارند.
در حال حاضر، شما می‌توانید در برنامه‌های Laravel خود در لیارا، به دیتابیس‌های زیر، متصل شوید:
در حال حاضر، شما می‌توانید در برنامه‌های Django خود در لیارا، به دیتابیس‌های زیر، متصل شوید:
<div className='h-2' />
<div className="grid grid-cols-3 gap-4">
{[
{ alt: 'mysql', platform: 'MySQL', link: "./mysql" },
{ alt: 'mariadb', platform: 'MariaDB', link: "./mariadb" },
{ alt: 'mysql', platform: 'MySQL/MariaDB', link: "./mysql" },
{ alt: 'postgres', platform: 'PostgreSQL', link: "./postgresql" },
{ alt: 'mssql', platform: 'MSSQL', link: "./mssql" },
{ alt: 'nodejs', platform: 'SQLite', link: "./sqlite" },
{ alt: 'django', platform: 'SQLite', link: "./sqlite" },
{ alt: 'redis', platform: 'Redis', link: "./redis" },
{ alt: 'elastic', platform: 'ElasticSearch', link: "./elastic-search" },
].map(item =>
<Link href={item.link}>
<Card className="flex cursor-pointer w-full items-center justify-between">
Expand All @@ -43,11 +43,11 @@ import {GoArrowLeft,} from "react-icons/go";
</Link>
)}
</div>
<div className='h-2' />
<div className='h-2' />

<div className='h-4' />
<div className="grid grid-cols-1 gap-4">
{[
{ alt: 'elastic', platform: 'ElasticSearch', link: "./elastic-search" },
{ alt: 'mongodb', platform: 'MongoDB', link: "./mongodb" },
].map(item =>
<Link href={item.link}>
<Card className="flex cursor-pointer w-full items-center justify-between">
Expand All @@ -64,24 +64,22 @@ import {GoArrowLeft,} from "react-icons/go";
</Link>
)}
</div>
<div className='h-2' />


<Section id="migrate-db" title="اجرای Migrationها در دیتابیس‌" />
برای اجرای Migrationها در دیتابیس مد نظر خود، می‌توانید پس از استقرار برنامه، وارد <a href="" className="blue-link">خط فرمان</a> برنامه خود شوید و دستور زیر را اجرا کنید تا عملیات migration برای شما، انجام شود:
برای اجرای Migrationها در دیتابیس مد نظر خود، می‌توانید پس از استقرار برنامه، وارد <a href="../../../details/console-shell" className="blue-link">خط فرمان</a> برنامه خود شوید و دستور زیر را اجرا کنید تا عملیات migration برای شما، انجام شود:

<div className='h-2' />
<div dir='ltr'>
<Highlight className="bash">
{`php artisan migrate`}
{`python manage.py migrate`}
</Highlight>
</div>
<div className='h-2' />
یا اینکه می‌توانید طبق <a href="../use-hooks" className="blue-link">مستندات هوک‌ها</a>، قبل از استقرار و در مسیر اصلی پروژه، یک فایل به نام <Important>liara_pre_start.sh</Important> ایجاد کنید و قطعه کد زیر را، درون آن، قرار دهید:
<div className='h-2' />
<div dir='ltr'>
<Highlight className="sh">
{`php artisan migrate --force`}
{`python manage.py migrate;`}
</Highlight>
</div>
<div className='h-2' />
Expand Down
179 changes: 114 additions & 65 deletions src/pages/paas/django/how-tos/connect-to-db/elastic-search.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -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:TgRCGavrbOJB82ZjzyVXRKbu@bromo.liara.cloud: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:G4bqHLMHvZKMscUy8OhLomK1@bromo.liara.cloud: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>
Loading

0 comments on commit 64c7980

Please sign in to comment.