簡體   English   中英

SQL 在 Phusion Passenger 下未在生產中執行

[英]SQL doesn't get executed in production under Phusion Passenger

我有一個類似於以下的代碼:

class TheClass < ActiveRecord::Base
  connection.execute "set language 'us_english'"
  // the rest of the code
end

執行命令不會在Passenger下的生產中執行,使用Mongrel沒關系,將代碼放在后來稱為function的代碼中。 乘客+開發設置也有效。

乘客處理連接的方式或我不知道的 Class 實例有什么不同嗎?

編輯:

很明顯,這是乘客建立聯系的方式。 所以問題歸結為“當連接建立時,是否有一種受支持的方式來執行 SQL 語句?”

我的心理調試說你被乘客的叉子 model 咬了。

基本上,Passenger 從一個已經加載了你的 Rails 環境的主進程中分出了一堆工作進程。 這減少了工作人員初始化所需的時間,因為您所有的 model、controller 等類都已經存在。

現在,從乘客文檔中:

請注意,Phusion Passenger 在創建新工作進程時會自動重新建立與數據庫的連接,這就是為什么您在使用智能生成模式時通常不會遇到任何數據庫問題的原因。

您的 connection.execute 語句在加載 TheClass 時運行。 這實際上只發生一次,在分叉所有工作人員的父進程中。 每個工作人員都建立了自己的連接,但從不運行您的“設置語言”查詢,因為已經加載了 TheClass。 它在開發模式下工作,因為它每次都會重新加載你的類。

您可能可以在 application.rb 中進行某種設置,以告訴 ActiveRecord 您的連接語言,否則您可能不得不在 before_filter 或其他東西中運行該查詢進行丑陋的破解。

檢查您的乘客錯誤日志,這些可能與標准 Rails 日志文件不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM