R.Reddington

WFN Üye
Konular
562
Mesajlar
562
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Kastamonu
Web Sitesi
Var
Alanı
Sosyal Backlink
1/1
Konu sahibi
İlk olarak Rails’in gösterdiği hata metnini ayırın: connection refused PostgreSQL sunucusuna ulaşılamadığını, password authentication failed sunucuya ulaşıldığını ancak kimlik doğrulamanın başarısız olduğunu, database does not exist ise veritabanı adının bulunamadığını gösterir. Bu nedenle rastgele ayar değiştirmek yerine önce config/database.yml içindeki host, port, database, username ve password değerlerini PostgreSQL’in gerçek bilgileriyle eşleştirin; ardından bağlantıyı Rails dışında psql ile doğrulayın.

Rails bağlantı ayarlarını doğrulayın​


Rails uygulamasının geliştirme ortamı için kullandığı dosya genellikle config/database.yml dosyasıdır. Varsayımsal bir yerel PostgreSQL kurulumu için temel yapı şu şekilde olabilir:

YAML:
development:
  adapter: postgresql
  encoding: unicode
  database: magazam_development
  username: postgres
  password: "postgres_sifreniz"
  host: 127.0.0.1
  port: 5432

Buradaki database değeri mevcut PostgreSQL veritabanının adıyla, username PostgreSQL kullanıcısıyla, password o kullanıcının parolasıyla aynı olmalıdır. PostgreSQL’in varsayılan TCP bağlantı noktası genellikle 5432’dir; ancak kurulumunuz farklı bir port kullanıyorsa Rails’te de aynı port yazılmalıdır. host değeri yerel bağlantıda çoğunlukla 127.0.0.1 veya localhost, Docker gibi ayrı bir servis ortamında ise PostgreSQL servisinin ağ adıdır.

Parolayı dosyaya yazmak yerine ortam değişkeni kullanıyorsanız değişkenin gerçekten tanımlı olduğunu da kontrol edin. Örneğin ENV["DATABASE_PASSWORD"] kullanılıyor ancak bu değişken boşsa Rails doğru kullanıcı adıyla bile bağlanamaz. Paroladaki özel karakterleri YAML içinde tırnak içine almak da ayrıştırma sorunlarını önler.

Önce PostgreSQL bağlantısını Rails dışında test edin​


Rails klasöründe değil, bağlantıyı sağlayan makinede aşağıdaki komutu kendi bilgilerinizle çalıştırın:

Bash:
PGPASSWORD='PAROLA' psql -h 127.0.0.1 -p 5432 -U postgres -d magazam_development

Komut başarılı olup PostgreSQL istemine geçerse sunucu, port, kullanıcı, parola ve veritabanı birlikte doğrudur. Bu durumda Rails tarafında database.yml seçimi, ortam adı veya ortam değişkenleri kontrol edilmelidir. Komut başarısız olursa sorun henüz Rails’e özgü değildir; aşağıdaki hata türüne göre PostgreSQL ayarını düzeltin. Parolayı komut satırında kullanmak yalnızca geçici tanılama içindir; işlemden sonra kabuk geçmişinde veya dosyalarda kalmadığından emin olun.

Hata metnine göre doğru düzeltmeyi yapın​

HataAnlamıYapılacak işlem
connection refused veya could not connectPostgreSQL çalışmıyor, yanlış host/port kullanılıyor veya sunucu o arayüzü dinlemiyor.PostgreSQL hizmetini başlatın; host ve portu doğrulayın. Uzak bağlantıda sunucunun listen_addresses ayarını ve ağ erişimini kontrol edin.
password authentication failedSunucuya ulaşıldı fakat kullanıcı parolası veya kimlik doğrulama yöntemi kabul edilmedi.Kullanıcı adını ve parolayı doğrulayın; gerekirse PostgreSQL yöneticisiyle parolayı yenileyip Rails ayarını güncelleyin.
no pg_hba.conf entryİstemci adresi, kullanıcı ve veritabanı için uygun erişim kuralı yok.pg_hba.conf dosyasına yalnızca gerekli istemci ağı için uygun bir kural ekleyin ve PostgreSQL’i yeniden yükleyin.
database does not existBelirtilen veritabanı adı sunucuda yok.Veritabanı adını düzeltin veya geliştirme ortamı için rails db:create çalıştırın.
role does not existBelirtilen PostgreSQL kullanıcısı oluşturulmamış.Mevcut bir kullanıcı kullanın veya PostgreSQL yöneticisiyle gerekli rolü oluşturun.

connection refused hatasını çözme​


PostgreSQL hizmetinin çalıştığını ve Rails’in bağlandığı makineden belirtilen porta erişilebildiğini kontrol edin. Yerel kurulumda host: 127.0.0.1 yazıldığı halde PostgreSQL farklı bir portta çalışıyorsa port değerini düzeltin. Uzak sunucuda PostgreSQL’in listen_addresses ayarı yalnızca localhost ise dış makineden gelen bağlantıyı kabul etmez. Bu ayarı genişletmeden önce güvenlik duvarında yalnızca gereken kaynak adresine izin verin; * ile herkese açmak güvenli bir varsayılan değildir.

Kimlik doğrulama hatalarını çözme​


password authentication failed mesajı PostgreSQL’e ulaşıldığını kanıtlar; ağ bağlantısının bozuk olduğunu göstermez. Önce aynı kullanıcı ve veritabanıyla psql komutunu deneyin. Komut da başarısızsa parola, kullanıcı veya pg_hba.conf içindeki yöntem incelenmelidir. Komut başarılı olduğu halde Rails başarısızsa Rails’in gerçekten hangi ortamı kullandığını ve parola ortam değişkeninin kabukta, servis yöneticisinde veya dağıtım ortamında tanımlı olup olmadığını kontrol edin.

Veritabanı ve şema oluşturma​


Bağlantı bilgileri doğruysa ancak geliştirme veritabanı henüz yoksa Rails projesinin kök dizininde şu komutları çalıştırın:

Bash:
bin/rails db:create
a bin/rails db:migrate

İkinci satırdaki başında fazladan a olmamalıdır; doğru komut şöyledir:

Bash:
bin/rails db:migrate

db:create veritabanını oluşturur, db:migrate ise Rails migration dosyalarını uygular. db:create sırasında yine parola veya bağlantı hatası alırsanız migration’a geçmeyin; önce psql testini ve database.yml değerlerini düzeltin. Migration tamamlandığı halde uygulama hata veriyorsa artık temel PostgreSQL bağlantısı kurulmuş demektir; sonraki hata tablo, migration veya uygulama sorgusuyla ilgilidir.

Docker veya uzak PostgreSQL kullanırken​


Rails ve PostgreSQL aynı Docker ağı içindeyse host olarak localhost yazmak çoğu durumda yanlıştır; bu değer Rails konteynerinin kendisini ifade eder. Bunun yerine PostgreSQL servisinin Compose dosyasındaki servis adını kullanın. Rails ana makinede, PostgreSQL Docker konteynerindeyse bağlantı adresi ve yayımlanan port farklı olabilir. Bu nedenle psql testini Rails uygulamasının çalıştığı aynı ortamdan yapın; ana makineden başarılı olan bağlantı, konteyner içinden de başarılı olacak anlamına gelmez.

Sorun devam ederse hata metniyle birlikte şu bilgileri toplayın: Rails ortamı, host ve port değerleri, veritabanı adı, kullanıcı adı, kullanılan psql komutu (parolayı çıkartarak), PostgreSQL sürümü ve sunucu günlüğündeki ilgili satır. Parolayı, bağlantı dizesini veya ortam değişkenlerinin değerini paylaşmayın. PostgreSQL belgeleri de kimlik doğrulama hatalarında sunucu günlüğünün istemci mesajından daha ayrıntılı olabileceğini belirtir; özellikle pg_hba.conf kuralı eşleşmiyorsa günlükteki istemci adresi, kullanıcı ve veritabanı bilgisi doğru kuralı belirlemenizi sağlar.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic