我正在將舊的Rails和PostgreSQL應用程序從2.1升級到Rails 3(通過成功的中間2.3.11步驟)。獨角獸!和PostgreSQL
最後,當我所有的Rspecs運行平穩時,我安裝了Mongrel 1.2.0.pre2並啓動並運行 - 一切正常。即使是100個併發用戶的JMeter測試用例也通過了OK。
但是,當我嘗試與獨角獸一樣!服務器,它在我自己使用它的時候工作正常,但是當我在JMeter的負載下得到它時,它開始給出100%的錯誤,從JMeter試圖發佈登錄的那一刻開始。而此時我查了一些特定頁面的同時,它給了我奇怪的錯誤是這樣的:
undefined method `eq' for nil:NilClass
在終端,我得到下面的輸出(但只有少數次):
message type 0x43 arrived from server while idle
message type 0x5a arrived from server while idle
WARNING: there is already a transaction in progress
編輯:這似乎與共享PGconnect
對象的問題,所以我刪除了一些以前的文本
我發現PostgreSQL docs指定PGconn
對象不能被共享的在併發請求的線程之間。
是獨角獸!或AR混合請求來自不同的線程在同一個對象中的PGconn
?
的database.yml:
production:
adapter: postgresql
encoding: unicode
database: ***
username: ***
password: ***
host: 127.0.0.1
我甚至試過把它添加無濟於事:
allow_concurrency: true
unicorn.conf:
worker_processes 8
working_directory "/full/path/to/app"
listen '/tmp/app.sock', :backlog => 512
timeout 30
pid "/full/path/to/app/tmp/pids/puppetmaster_unicorn.pid"
preload_app true
if GC.respond_to?(:copy_on_write_friendly=)
GC.copy_on_write_friendly = true
end
規格:
- Rails 3.0.6(因部署env)
- 獨角獸! 4.1.1
- Nginx的1.0.5
- PG寶石0.11.0
- 的PostgreSQL 9.0.4
- 的Mac OS X 10.7.2
如果Rails的版本應該是罪魁禍首,當然我可以升級到最新版本。我剛開始瞭解服務提供商的服務。
多少麒麟工人,你在unicorn.rb創建?什麼超時? – stephenmurdoch
我使用unicorn.conf更新了我的問題 – Laas