2011-08-30 56 views
0

在我adhearsion撥號方案,我有以下的代碼,導致從呼叫立即斷開,沒有任何輸出到日誌或控制檯:Adhearsion的撥號規則不能訪問軌道模型

the_flow = CallFlow.where(:dnis => dnis).first 

CallFlow是一個模型在我的rails應用程序(gui/app/models/call_flow.rb)中,它位於我的adhearsion應用程序的gui目錄中。在我.ahnrc文件我有:

paths: 
    # All paths are relative to this file's directory 
    init: config/startup.rb 
    dialplan: dialplan.rb 
    events: events.rb 
    models: gui/app/models/*.rb 

這是call_flow.rb:

class CallFlow < ActiveRecord::Base 
    belongs_to :routable, :polymorphic => true 

    def dialplan 
    puts self.routable.description.squeeze("\n").strip 
    end 

    def target_route=(params) 
    self.routable = params[:kind].constantize.new(params.reject {|k,v| k == "kind"}) 
    end 
end 

最後,我在配置/ startup.rb以下行:

config.enable_rails :path => 'gui', :env => :development 

我知道模型的工作原理,因爲我可以使用rails服務器創建記錄。但我甚至不知道如何獲得關於當撥號計劃到達上面第一行時撥打電話的信息。

+0

如果我知道如何解救ActiveRecord問題,這可能會有所幫助... –

回答

1

有些事情要檢查代碼:

  • 確保您在config/startup.rb
  • 設置日誌記錄到:debug確定您已經激活要麼的Rails集成或數據庫的集成,而不是兩個。
  • 如果您正在運行1.1.0版之前的Adhearsion版本,則在dialplan.rb中發生的某些異常可能會無聲無息地丟失。考慮升級到1.1.0或更高版本(1.2.0是當前穩定的)並創建一個異常處理程序。這可以是一個簡單的消息記錄器,也可以向Airbrake報告異常情況。查看這篇文章的底部,瞭解一個簡單的Adhearsion異常記錄器。
  • 嘗試啓動Adhearsion控制檯,查看是否加載了模型。用ahn start console /path/to/ahn/app啓動Adhearsion控制檯。然後您將擁有一個類似於Rails控制檯的控制檯,並且應該可以訪問所有ActiveRecord模型(假設Rails集成已正確加載)。

Adhearsion 1.1.0或更高版本的示例異常記錄器。把這個在您的events.rb:on Rails的與數據庫集成

events.exception.each do |e| 
    ahn_log.error e.message 
    ahn_log.debug e.backtrace.join("\n") 
end 

一般筆記Adhearsion:

  • 對於Rails開發集成有一行類似config.enable_rails :path => '/path/to/rails/app', :env => :production
  • 對於數據庫的整合,使用的東西例如: config.enable_database :adapter => 'mysql', :username => 'root', :password => '', :host => 'localhost'
  • 對於僅數據庫集成(不是Rails集成),您應該確保您的模型位於Adhearsion可以找到它們的位置。默認位置是models/,但可以通過編輯Adhearsion應用程序的基本目錄中的.ahnrc文件來更改。
+0

使用較新版本的adhearsion會很容易嗎? –

+0

使用更新版本的Adhearsion應該很容易。只需更新您的Gemfile(假設您至少使用了Ahn 1.0),然後安裝並安裝。我已經親自將Adhearsion應用程序升級到0.8.3,無需更改任何代碼。 1.0 API保證向後兼容,直到Ahn 2.0。如果不是,這是一個錯誤。 –

+0

你幾乎用events.rb部分拯救了我的生命。 IMO應該被內置到Adhearsion中作爲一個選項以及一個全局配置文件:)謝謝Ben –

0

嘗試在軌控制檯

首先運行該代碼啓動控制檯

bundle exec rails console 

,然後嘗試運行,這是造成問題的

CallFlow.where(:dnis => "something").first # replace "something" with something valid