如何修复JSON.load挂在Rails应用程序上?

时间:2019-07-01 18:51:39

标签: ruby-on-rails json

我正在处理大型Rails应用程序。有数百种不同的搜索功能,我们希望查看搜索数据,以便我们可以分析人们正在搜索的内容以及可以改进的内容。我编写了一个脚本,该脚本将解析日志文件并将结果存储在JSON文件中,然后可以对其进行操作和可视化。但是,当我在控制器中运行JSON.loadJSON.parse时,应用程序挂起。没有引发任何错误,但不会加载任何页面。尝试调用后杀死应用程序的唯一方法是运行kill -9 <pid>。我怎样才能解决这个问题?有什么问题吗?

我确定问题出在JSON.load/parse,因为如果在它之前引发异常,它将显示出来,但是在它之后则不会出现异常。我尝试将json gem添加到我的Gemfile中,并在应用程序中要求它,但没有任何效果。所有的编码都是正确的,并且JSON文件只有大约8层深,所以我认为这不是问题。

这是创建将哈希转换为json文件的代码:

File.foreach(log_file_path).with_index do |line, line_num|
        #Getting time of search
        if line_num + 2..3 == @lines_with_searches[index]
                date_and_time = /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} -\d{4}/
                temp_metadata[:line] = line_num
                temp_metadata["time"] = line.match(date_and_time)[0] if line.match(date_and_time)
        end

        #Getting controller name and method
        if line_num + 1 == @lines_with_searches[index]
                #Fixes for missed times
                if temp_metadata["time"].nil?
                        temp_metadata["time"] = prev_date_time
                else
                        prev_date_time = temp_metadata["time"]
                end

                controller_name = /\w+#\w+/
                controller = line.match(controller_name)[0] if line.match(controller_name)
                if controller and @searches["search_info"].keys.include? controller
                        #Adding to existing search object
                        @searches["search_info"][controller]["num_searches"] += 1
                elsif controller
                        #Setting up new search object
                        @searches["search_info"][controller] = {}
                        @searches["search_info"][controller]["num_searches"] = 1
                        @searches["search_info"][controller]["search_objs"] = []
                else
                        #Implies a missed name
                        @searches["num_nameless"] += 1
                end
        end

        #Getting search params and resetting for next match
        if line_num == @lines_with_searches[index]
                temp_metadata[:params] = eval(line.match(/\{.+\}/)[0])
                @searches["search_info"][controller]["search_objs"] << temp_metadata
                temp_metadata = {}
                index += 1
        end
end

然后将其转换为JSON.pretty_generate下方的json-我尝试将其更改为.to_jsonJSON.generate,但均无效。通过遍历文件并查找同时包含“参数:”和“搜索”的行来进一步生成@lines_with_searches

@search_data = JSON.load(File.read(Rails.root.to_s + "/script/out/search_log.json")) 这是加载JSON文件的代码。

我希望程序不会挂起,或者至少在加载文件时引发错误。相反,它会挂起我的整个应用程序。

0 个答案:

没有答案