2014-01-29 45 views
3

我們可以使用單一源文件和單個database.yml文件連接到multiple development instances嗎?我的意思是,我需要來自連接4個不同MySQL數據庫的同一個源的4個開發實例。我可以通過使用不同的PORT ID s來啓動服務器嗎?Rails - 具有單個源文件和database.yml文件的多個開發實例

例如:

development: 
    adapter: mysql2 
    database: TEST1_development 
    host: localhost 
    username: root 
    password: password 
    encoding: utf8 
    pool: 30 

development-2: 
    adapter: mysql2 
    database: TEST2_development 
    host: localhost 
    username: root 
    password: password 
    encoding: utf8 
    pool: 30 

development-3: 
    adapter: mysql2 
    database: TEST3_development 
    host: localhost 
    username: root 
    password: password 
    encoding: utf8 
    pool: 30 

development-4: 
    adapter: mysql2 
    database: TEST4_development 
    host: localhost 
    username: root 
    password: password 
    encoding: utf8 
    pool: 30 

然後,那麼如何我們可以開始4臺不同的服務器(在本地主機)同時連接這些4個數據庫? (我們通常使用rails server在開發單個實例。)

感謝:) -

回答

2

這很容易。

只需更新問題中給出的database.yml文件即可。假設我們的開發實例是development,development-2,development-3development-4

首先,你只需要創建一個環境文件development.rb 3份(可發現裏面config/environments/),並將其重命名爲development-2.rbdevelopment-3.rbdevelopment-4.rb

然後,只需在啓動服務器之前運行以下步驟。

RAILS_ENV=development rake db:create (OR just rake db:create as it defaults to development) 
RAILS_ENV=development-2 rake db:create 
RAILS_ENV=development-3 rake db:create 
RAILS_ENV=development-4 rake db:create 

RAILS_ENV=development rake db:schema:load (OR just rake db:schema:load as it defaults to development) 
RAILS_ENV=development-2 rake db:schema:load 
RAILS_ENV=development-3 rake db:schema:load 
RAILS_ENV=development-4 rake db:schema:load 

RAILS_ENV=development rake db:seed (OR just rake db:seed as it defaults to development) 
RAILS_ENV=development-2 rake db:seed 
RAILS_ENV=development-3 rake db:seed 
RAILS_ENV=development-4 rake db:seed 

然後,啓動所有具有不同服務器pid的實例,如下所示。

rails s -p 3000 -e development --pid tmp/pids/server.pid (OR rails s by default) 
rails s -p 3002 -e development-2 --pid tmp/pids/server.2.pid 
rails s -p 3003 -e development-3 --pid tmp/pids/server.3.pid 
rails s -p 3004 -e development-4 --pid tmp/pids/server.4.pid 

這將同時啓動所有實例從同source和一個database.yml文件。謝謝大家的回覆和幫助:) -

+1

如果你發現自己開始了很多過程,請查看'foreman' gem – levinalex

2
  • 您不限於默認的軌道環境。你可以只有development-2,development-3環境。閱讀this post on the 37signals blog where DHH talks about that

  • database.yml可以讀取環境變量。

    development: 
        adapter: postgresql 
        host: localhost 
        database: <%= ENV['POSTGRES_DATABASE'] %> 
        username: <%= ENV['POSTGRES_USER'] %> 
        password: <%= ENV['POSTGRES_PASSWORD'] %> 
    

    然後確保在啓動服務器時設置這些設置。

+0

謝謝Levinalex。我們可以一起運行開發,開發-2,開發-3,開發-4實例嗎? –

+0

只要他們不試圖在相同的端口上偵聽或使用相同的資源:是的,這應該工作。 – levinalex

+0

謝謝:)。如果您能詳細說明我們如何做到這一點,那將會很棒。 –

相關問題