Heroku にアップロードしたときに、ローカルホストと同じアプリの違いに混乱しています。
コントローラー メソッドを介してオンザフライで JSON をレンダリングし、AJAX 要求を使用して Javascript で取得します。
ローカルホストでは、完全に機能しています。しかし、Herokuにアップロードすると全く動きません。なぜそうなるのかはわかりません。Heroku がモデルにアクセスする方法とローカルホストがアクセスする方法の違いと関係がありますか?
同じタイムスタンプからの 2 つのデバッグ出力を次に示します。
働く:
以前は 106.944877 でしたが、現在は 0 で、増分は -84.07055608611111 です。
動作していません:
以前は 0 でしたが、現在は 0 刻みで 0 です
コードは次のとおりです。
コントローラーの方法 #1:
# present data to grab for view work
# get/user_data
def user_inst_data
timestamp = params[:time_now]
user_id = params[:user_id]
before = fetch_data_at_time(user_id, timestamp)
after = fetch_data_at_time(user_id, (timestamp.to_i+3600))
response = Hash.new
response['before'] = before
response['after'] = after
render json: response.to_json
end
コントローラーの方法 #2:
def fetch_data_at_time(user_id, time_at)
# convert time to object
timestamp = Time.at(time_at.to_i)
# break down timestamp right now
year = timestamp.year
month = timestamp.month
day = timestamp.day
hour = timestamp.hour+1 #we're 1-indexed
# find data
response = UserData.where(:user_id=>user_id, :year=>year, :month=>month, :day=>day, :hour=>hour).select('power')
return response
end
ジャバスクリプト:
function real_time_update(){
//this function will fake "real-time" updates by grabbing simulated data from the DB
//continue to update component every 5 seconds
setTimeout(real_time_update,5000);
var time = Math.round(((new Date()).getTime())/1000);
var targetURL = "get/user_data?time_now="+time+"&user_id="+<%= @user.id %>;
var power_before = 0;
var power_after = 0;
// GET data with AJAX request, set function for successful return
$.get(targetURL, function(data){
power_before = data.before[0].power;
power_after = data.after[0].power;
// after getting data before and after, find increment between them, delta-naught
var delta = power_after - power_before;
// scale before power by a percentage based on how much time has elapsed since last hour
var current_time = new Date();
var minutes_passed = (current_time.getMinutes())*60;
var seconds_passed = minutes_passed + (current_time.getSeconds());
var percent_hour = seconds_passed/3600;
// calculate increment
var delta_change = delta*percent_hour;
// DEBUG----
console.log("Before it was "+power_before+", now it is "+power_after+" with increments of "+delta_change)
//add to power_before and update html component
var power_update = power_before + delta_change;
// redraw component
drawChart(power_update);
})
}