- Konu sahibi
- #1
Rails uygulamasını PostgreSQL’e bağlamak için PostgreSQL sunucusunda bir kullanıcı ve veritabanı oluşturup Rails projesindeki PostgreSQL sürücüsünü etkinleştirmeniz, ardından
Önce PostgreSQL sunucusunun çalıştığından ve bağlanmak için kullanacağınız bilgilerin hazır olduğundan emin olun. Gerekli bilgiler şunlardır:
Parolayı gerçek projede doğrudan kaynak koduna yazmayın. Özellikle üretim ortamında parola, ortam değişkeni veya platformun gizli bilgi yönetimi aracılığıyla sağlanmalıdır.
Yeni bir Rails projesi oluşturuyorsanız PostgreSQL’i veritabanı olarak baştan seçebilirsiniz:
Mevcut bir projede
Ardından proje dizininde
Rails, veritabanı bağlantılarını çoğunlukla
Buradaki
Dosyayı kaydettikten sonra geliştirme veritabanını hazırlayın:
Bu komut başarılı biçimde tamamlanırsa Rails bağlantı kurabilmiş ve gerekli veritabanı işlemini gerçekleştirmiş demektir. Bu sonuç, uygulamanızdaki bütün modellerin veya sorguların doğru çalıştığını kanıtlamaz; yalnızca Rails’in PostgreSQL’e erişebildiğini ve hazırlama adımını tamamlayabildiğini gösterir.
Veritabanı hazırlandıktan sonra migration dosyalarını çalıştırın:
Ardından Rails konsolunda bağlantının hangi veritabanına yapıldığını kontrol edebilirsiniz:
Çıktıda
Üretim ortamında
Örnek bir bağlantı adresi şu biçimdedir:
Parolada
Aynı görünen bağlantı hataları farklı nedenlerden kaynaklanabilir. Önce Rails’in hangi ortamda çalıştığını ve hangi yapılandırmayı yüklediğini kontrol edin; geliştirme ayarını düzeltip üretim ortamında aynı sonucu beklemeyin.
Hata devam ederse yalnız hata metnini değil, çalıştırılan Rails ortamını,
config/database.yml dosyasındaki bağlantı bilgilerini tanımlamanız gerekir. Ayarlar doğruysa bin/rails db:prepare komutu veritabanını oluşturur veya şemayı hazırlar; bağlantıyı doğrulamak için daha sonra basit bir Rails komutu çalıştırabilirsiniz.Gerekli hazırlıklar
Önce PostgreSQL sunucusunun çalıştığından ve bağlanmak için kullanacağınız bilgilerin hazır olduğundan emin olun. Gerekli bilgiler şunlardır:
- PostgreSQL sunucusunun adresi: Yerel geliştirmede genellikle
localhost. - Port: PostgreSQL’in yaygın varsayılan portu
5432’dir; sunucunuz farklı port kullanıyorsa onu yazmalısınız. - Kullanıcı adı ve parola.
- Rails’in kullanacağı veritabanı adı.
rails_app adlı bir PostgreSQL kullanıcısı ve blog_development adlı bir veritabanı kullanabilirsiniz. Kullanıcıyı ve veritabanını PostgreSQL istemcisinden oluşturmak için yetkili bir hesapla şu komutları çalıştırın:
SQL:
CREATE ROLE rails_app WITH LOGIN PASSWORD 'Güçlü_Bir_Parola';
CREATE DATABASE blog_development OWNER rails_app;
Parolayı gerçek projede doğrudan kaynak koduna yazmayın. Özellikle üretim ortamında parola, ortam değişkeni veya platformun gizli bilgi yönetimi aracılığıyla sağlanmalıdır.
Rails projesinde PostgreSQL sürücüsünü etkinleştirme
Yeni bir Rails projesi oluşturuyorsanız PostgreSQL’i veritabanı olarak baştan seçebilirsiniz:
Bash:
rails new blog -d postgresql
cd blog
bundle install
Mevcut bir projede
Gemfile dosyasındaki veritabanı sürücüsünü kontrol edin. PostgreSQL için gereken gem pg paketidir. Dosyada yoksa aşağıdaki satırı ekleyin:
Ruby:
gem "pg"
Ardından proje dizininde
bundle install çalıştırın. Kurulum sırasında pg derlenemiyorsa sorun genellikle PostgreSQL istemci geliştirme dosyalarının veya derleme araçlarının eksik olmasından kaynaklanır. Bu durumda Rails ayarını değiştirmek yerine işletim sisteminizde PostgreSQL’in geliştirme paketlerini ve Ruby gem derleme araçlarını kurmanız gerekir.config/database.yml dosyasını ayarlama
Rails, veritabanı bağlantılarını çoğunlukla
config/database.yml dosyasından okur. Yerel geliştirme için en küçük çalışan yapılandırma şu şekildedir:
YAML:
default: &default
adapter: postgresql
encoding: unicode
host: localhost
port: 5432
username: rails_app
password: Güçlü_Bir_Parola
pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %%>
development:
<<: *default
database: blog_development
test:
<<: *default
database: blog_test
Buradaki
adapter: postgresql satırı Rails’e PostgreSQL sürücüsünü kullanacağını bildirir. host, port, username, password ve database değerleri PostgreSQL sunucusundaki gerçek bilgilerle aynı olmalıdır. pool değeri ise Rails’in aynı anda kullanabileceği bağlantı havuzunun boyutunu belirler; bunu uygulamanızın iş parçacığı sayısıyla uyumlu tutmalısınız.Dosyayı kaydettikten sonra geliştirme veritabanını hazırlayın:
Bash:
bin/rails db:prepare
Bu komut başarılı biçimde tamamlanırsa Rails bağlantı kurabilmiş ve gerekli veritabanı işlemini gerçekleştirmiş demektir. Bu sonuç, uygulamanızdaki bütün modellerin veya sorguların doğru çalıştığını kanıtlamaz; yalnızca Rails’in PostgreSQL’e erişebildiğini ve hazırlama adımını tamamlayabildiğini gösterir.
Bağlantıyı ve migration işlemlerini doğrulama
Veritabanı hazırlandıktan sonra migration dosyalarını çalıştırın:
Bash:
bin/rails db:migrate
Ardından Rails konsolunda bağlantının hangi veritabanına yapıldığını kontrol edebilirsiniz:
Bash:
bin/rails runner 'puts ActiveRecord::Base.connection_db_config.database'
Çıktıda
blog_development görünüyorsa Rails beklenen geliştirme veritabanını kullanıyordur. Bu kontrol yalnızca seçilen veritabanı adını gösterir; yetki, tablo şeması veya uygulamanın sorgularının doğruluğu ayrıca db:migrate ve uygulama işlemleriyle kontrol edilir.Üretim ortamında
database.yml içine sabit parola koymak yerine bağlantı bilgilerini ortam değişkenlerinden okuyabilirsiniz:
YAML:
production:
adapter: postgresql
encoding: unicode
url: <%%= ENV.fetch("DATABASE_URL") %%>
pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %%>
Örnek bir bağlantı adresi şu biçimdedir:
Kod:
postgresql://rails_app:[email protected]:5432/blog_production
Parolada
@, :, /, ? veya # gibi URL içinde özel anlamı olan karakterler varsa bağlantı adresinde uygun URL kodlaması kullanılmalıdır. Üretim sunucusunda DATABASE_URL değerinin gerçekten tanımlı olduğunu doğruladıktan sonra bin/rails db:prepare veya dağıtım sürecinizin kullandığı migration komutunu çalıştırın.Hata mesajını sonuca göre yorumlama
Aynı görünen bağlantı hataları farklı nedenlerden kaynaklanabilir. Önce Rails’in hangi ortamda çalıştığını ve hangi yapılandırmayı yüklediğini kontrol edin; geliştirme ayarını düzeltip üretim ortamında aynı sonucu beklemeyin.
| Hata veya durum | Anlamı ve sonraki işlem |
|---|---|
| connection refused | PostgreSQL çalışmıyor olabilir veya host/port yanlış olabilir. PostgreSQL servis durumunu, host değerini ve port değerini kontrol edin. |
| password authentication failed | Kullanıcı adı ya da parola PostgreSQL’deki bilgilerle eşleşmiyordur. Aynı kullanıcıyla PostgreSQL istemcisinden giriş yapmayı deneyin; gerekirse parolayı yetkili hesapla yenileyin. |
| database does not exist | Rails’in database veya bağlantı URL’sindeki veritabanı adı yanlış ya da veritabanı henüz oluşturulmamıştır. Veritabanı adını listeleyip database.yml ile karşılaştırın. |
| permission denied | Kullanıcı sunucuya bağlanmış ancak veritabanı veya tablo üzerinde gerekli yetkiye sahip değildir. Veritabanı sahipliğini ve verilen izinleri kontrol edin. |
| pg gem kurulumu başarısız | Rails henüz PostgreSQL’e ulaşma aşamasına gelmemiştir. Önce PostgreSQL istemci kitaplıklarını ve Ruby gem derleme ortamını düzeltin. |
host, port, veritabanı adını ve kullanıcı adını paylaşarak inceleyin; parolayı, DATABASE_URL değerini ve diğer gizli bilgileri paylaşmayın. PostgreSQL’e doğrudan istemciyle bağlanamıyorsanız sorun Rails yapılandırmasından önce sunucu, ağ veya PostgreSQL kimlik doğrulama ayarındadır. İstemciyle bağlantı kuruluyor ancak Rails kuramıyorsa Gemfile, pg kurulumu ve config/database.yml dosyasındaki ortam bölümünü karşılaştırın.