diff --git a/app/Livewire/Project/Application/General.php b/app/Livewire/Project/Application/General.php
index 787bf879c..75c8feea6 100644
--- a/app/Livewire/Project/Application/General.php
+++ b/app/Livewire/Project/Application/General.php
@@ -244,12 +244,19 @@ class General extends Component
public function updatedApplicationFqdn()
{
- $this->application->fqdn = str($this->application->fqdn)->replaceEnd(',', '')->trim();
- $this->application->fqdn = str($this->application->fqdn)->replaceStart(',', '')->trim();
- $this->application->fqdn = str($this->application->fqdn)->trim()->explode(',')->map(function ($domain) {
- return str($domain)->trim()->lower();
- });
- $this->application->fqdn = $this->application->fqdn->unique()->implode(',');
+ try {
+ $this->application->fqdn = str($this->application->fqdn)->replaceEnd(',', '')->trim();
+ $this->application->fqdn = str($this->application->fqdn)->replaceStart(',', '')->trim();
+ $this->application->fqdn = str($this->application->fqdn)->trim()->explode(',')->map(function ($domain) {
+ return str($domain)->trim()->lower();
+ });
+ $this->application->fqdn = $this->application->fqdn->unique()->implode(',');
+ $this->application->save();
+ } catch (\Throwable $e) {
+ $originalFqdn = $this->application->getOriginal('fqdn');
+ $this->application->fqdn = $originalFqdn;
+ return handleError($e, $this);
+ }
$this->resetDefaultLabels();
}
@@ -288,18 +295,22 @@ class General extends Component
public function resetDefaultLabels()
{
- if ($this->application->settings->is_container_label_readonly_enabled) {
- return;
+ try {
+ if ($this->application->settings->is_container_label_readonly_enabled) {
+ return;
+ }
+ $this->customLabels = str(implode('|coolify|', generateLabelsApplication($this->application)))->replace('|coolify|', "\n");
+ $this->ports_exposes = $this->application->ports_exposes;
+ $this->is_container_label_escape_enabled = $this->application->settings->is_container_label_escape_enabled;
+ $this->application->custom_labels = base64_encode($this->customLabels);
+ $this->application->save();
+ if ($this->application->build_pack === 'dockercompose') {
+ $this->loadComposeFile();
+ }
+ $this->dispatch('configurationChanged');
+ } catch (\Throwable $e) {
+ return handleError($e, $this);
}
- $this->customLabels = str(implode('|coolify|', generateLabelsApplication($this->application)))->replace('|coolify|', "\n");
- $this->ports_exposes = $this->application->ports_exposes;
- $this->is_container_label_escape_enabled = $this->application->settings->is_container_label_escape_enabled;
- $this->application->custom_labels = base64_encode($this->customLabels);
- $this->application->save();
- if ($this->application->build_pack === 'dockercompose') {
- $this->loadComposeFile();
- }
- $this->dispatch('configurationChanged');
}
public function checkFqdns($showToaster = true)
diff --git a/app/Livewire/Project/Service/EditDomain.php b/app/Livewire/Project/Service/EditDomain.php
index 70e8006c7..cdec580bb 100644
--- a/app/Livewire/Project/Service/EditDomain.php
+++ b/app/Livewire/Project/Service/EditDomain.php
@@ -23,13 +23,17 @@ class EditDomain extends Component
public function updatedApplicationFqdn()
{
- $this->application->fqdn = str($this->application->fqdn)->replaceEnd(',', '')->trim();
- $this->application->fqdn = str($this->application->fqdn)->replaceStart(',', '')->trim();
- $this->application->fqdn = str($this->application->fqdn)->trim()->explode(',')->map(function ($domain) {
- return str($domain)->trim()->lower();
- });
- $this->application->fqdn = $this->application->fqdn->unique()->implode(',');
- $this->application->save();
+ try {
+ $this->application->fqdn = str($this->application->fqdn)->replaceEnd(',', '')->trim();
+ $this->application->fqdn = str($this->application->fqdn)->replaceStart(',', '')->trim();
+ $this->application->fqdn = str($this->application->fqdn)->trim()->explode(',')->map(function ($domain) {
+ return str($domain)->trim()->lower();
+ });
+ $this->application->fqdn = $this->application->fqdn->unique()->implode(',');
+ $this->application->save();
+ } catch(\Throwable $e) {
+ return handleError($e, $this);
+ }
}
public function submit()
diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php
index 487a6f107..151e15c91 100644
--- a/bootstrap/helpers/shared.php
+++ b/bootstrap/helpers/shared.php
@@ -1174,10 +1174,10 @@ function check_domain_usage(ServiceApplication|Application|null $resource = null
if ($domains->contains($naked_domain)) {
if (data_get($resource, 'uuid')) {
if ($resource->uuid !== $app->uuid) {
- throw new \RuntimeException("Domain $naked_domain is already in use by another resource called:
{$app->name}.");
+ throw new \RuntimeException("Domain $naked_domain is already in use by another resource:
Link: {$app->name}");
}
} elseif ($domain) {
- throw new \RuntimeException("Domain $naked_domain is already in use by another resource called:
{$app->name}.");
+ throw new \RuntimeException("Domain $naked_domain is already in use by another resource:
Link: {$app->name}");
}
}
}
@@ -1193,10 +1193,10 @@ function check_domain_usage(ServiceApplication|Application|null $resource = null
if ($domains->contains($naked_domain)) {
if (data_get($resource, 'uuid')) {
if ($resource->uuid !== $app->uuid) {
- throw new \RuntimeException("Domain $naked_domain is already in use by another resource called:
{$app->name}.");
+ throw new \RuntimeException("Domain $naked_domain is already in use by another resource:
Link: {$app->service->name}");
}
} elseif ($domain) {
- throw new \RuntimeException("Domain $naked_domain is already in use by another resource called:
{$app->name}.");
+ throw new \RuntimeException("Domain $naked_domain is already in use by another resource:
Link: {$app->service->name}");
}
}
}
diff --git a/database/migrations/2024_10_10_081444_remove_constraint_from_service_applications_fqdn.php b/database/migrations/2024_10_10_081444_remove_constraint_from_service_applications_fqdn.php
new file mode 100644
index 000000000..feb144de6
--- /dev/null
+++ b/database/migrations/2024_10_10_081444_remove_constraint_from_service_applications_fqdn.php
@@ -0,0 +1,34 @@
+dropUnique(['fqdn']);
+ });
+ Schema::table('applications', function (Blueprint $table) {
+ $table->dropUnique(['fqdn']);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::table('service_applications', function (Blueprint $table) {
+ $table->unique('fqdn');
+ });
+ Schema::table('applications', function (Blueprint $table) {
+ $table->unique('fqdn');
+ });
+ }
+};
diff --git a/resources/views/livewire/project/application/general.blade.php b/resources/views/livewire/project/application/general.blade.php
index e2cc92528..6c93d25b7 100644
--- a/resources/views/livewire/project/application/general.blade.php
+++ b/resources/views/livewire/project/application/general.blade.php
@@ -63,7 +63,7 @@
@endif
@if ($application->build_pack !== 'dockercompose')