使用 SSH Gateway 設立通道連線遠端的資料庫表格

Home Ruby on Rails 使用 SSH Gateway 設立通道連線遠端的資料庫表格
使用 SSH Gateway 設立通道連線遠端的資料庫表格
Ruby on Rails

原由

由於客戶的主機放在 kinsta 上,不好開發佈署 ruby on rails 程式,又必須連線至一些資料庫的表格,所以需要透過 ssh gateway tunnel。

如果你像我一樣用 ‘rails config database remote ssh tunnel’ 等關鍵字搜尋,你很可能會找到這一篇文章—“How do I configure Rails for password-less access to remote database”

很可惜,這篇文章的解法我左試右試就是無法成功,我的結論是在 config 裡想要成功地轉換 port 是辦不到的。於是我將念頭轉到了 model。

解決方法

首先你必須安裝 net-ssh-gateway

gem 'net-ssh-gateway'

別忘了 bundle install

然後建立一個遠端 table 的 model file,因為筆者想要連進 wordpress 的 wp_post table,所以就建了一個 wp_post.rb

class WpPost < ActiveRecord::Base
  establish_connection(
    :adapter  => "mysql2",
    :host     => "127.0.0.1",
    :username => "your_username",
    :password => "your_password",
    :database => "your_database",
    :port     => Net::SSH::Gateway.new(
      '104.xxx.xxx.xx',
      'username',
      port: '42622',
      password: 'password'
    ).open('127.0.0.1', 3306, 3307)
  )
  self.table_name = "wp_posts"
end

將 username, password, database, 等換成正確的之後,可以 rails c 打開 console 後測試看看,如無問題 WpPost.last 就會順利連線並取回最後一個 wp_post。

相關文章