Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Rails.cache.fetch不适用于json数组。

Rails.cache.fetch不适用于json数组。
EN

Stack Overflow用户
提问于 2018-01-12 14:46:59
回答 2查看 1.9K关注 0票数 0

我试图使用Rail.cache.fetch特性来缓存服务器API响应,但似乎总是‘零’而不是缓存数据。方法运行一次,然后在尝试通过@my_api_data_变量时出现“访问nil类”类错误时总是失败。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def index
  api_statuses_

end
def api_statuses_
  Rails.cache.fetch('api_repsonse_m_', expires_in: 3.minute) do


      @mypairs_ = ['ticker1','ticker2', 'ticker3', 'ticker4', 'ticker5', 'ticker6', 'ticker7', 'ticker8', 'ticker9', 'ticker10']

      @my_api_data_ = []
      @my_api_data_poplr = []
      url = 'https://myserver.com/ticker/'

      @mypairs_.each do |item_|
        uri = URI(url + item_)
        response = Net::HTTP.get(uri)
        begin
          #response is like this {"status":"valu1","time":"valu2","data":"valu3"}
          myresult = JSON.parse(response)
        rescue JSON::ParserError

        end
        #Rails.logger.info myresult
        @my_api_data_.push(myresult);
      end

  end
end

我希望也许有人知道为什么每次都会变坏

我试着在缓存块结束之前添加行"@my_api_data_“。这也是我在最初的情况下所犯的错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
I, [2018-01-13T19:29:14.384766 #5716]  INFO -- : Processing by Private::MydataController#index as HTML
I, [2018-01-13T19:29:14.403774 #5716]  INFO -- :   Rendered private/mydata/index.html.slim within layouts/mydatalayout_ (0.7ms)
I, [2018-01-13T19:29:14.403919 #5716]  INFO -- : Completed 500 Internal Server Error in 19ms
F, [2018-01-13T19:29:14.405077 #5716] FATAL -- : 
ActionView::Template::Error (undefined method `each' for nil:NilClass):
    37:         .row
    38:           /! Top head coin-boxes
    39:           .market-top-coin-boxes
    40:             - @my_api_data_.each do |pair_data|
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-13 01:28:45

这里的问题似乎是,您必须在块的末尾返回@my_api_data_。让我们检查下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def api_statuses_
  Rails.cache.fetch('api_repsonse_m_', expires_in: 3.minute) do
    @mypairs_ = ['ticker1','ticker2', 'ticker3', 'ticker4', 'ticker5', 'ticker6', 'ticker7', 'ticker8', 'ticker9', 'ticker10']

    @my_api_data_ = []
    @my_api_data_poplr = []
    url = 'https://myserver.com/ticker/'

    @mypairs_.each do |item_|
      uri = URI(url + item_)
      response = Net::HTTP.get(uri)
      begin
        #response is like this {"status":"valu1","time":"valu2","data":"valu3"}
        myresult = JSON.parse(response)
      rescue JSON::ParserError
      end
      #Rails.logger.info myresult
      @my_api_data_.push(myresult);
    end
    @my_api_data
  end
end

请注意,第一次调用api_statuses_方法时,将执行所有阻塞的值,返回值将写入api_repsonse_m_键下的缓存。因此,下次调用api_statuses_时,如果expires_in中的时间尚未过期,它将返回缓存中保存的值,并且不会执行该块。

另外,你能告诉我们你在哪里和如何使用这种方法吗?显示代码和错误日志可以很好地理解问题。

更新的:您似乎没有正确地使用这个。应该在api_statuses_控制器下的索引方法中调用MydataController方法,并将返回值保存到将在视图中使用的变量中。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module Private
  class MydataController
    def index 
      @api_statuses = api_statuses_
    end
  end
end

然后,在你看来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.row
  .market-top-coin-boxes
    - @api_statuses.each do |pair_data|
票数 1
EN

Stack Overflow用户

发布于 2018-01-13 20:25:44

你为什么在视图中使用“@my_api_data_”?

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def index
  @result = api_statuses_
end

在视图文件中使用@result。注意,如果有缓存命中,则不会运行传递给Rails.cache.fetch的块。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48235064

复制
相关文章
shell脚本实际运用_shell脚本调用另一个脚本
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168438.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
9980
在 Shell 脚本中调用另一个 Shell 脚本的三种方式
fork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调用 foo.sh 这个脚本,比如如果是 foo.sh 在当前目录下,就是 ./foo.sh。运行的时候 terminal 会新开一个子 Shell 执行脚本 foo.sh,子 Shell 执行的时候, 父 Shell 还在。子 Shell 执行完毕后返回父 Shell。 子 Shell 从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回父 Shell。
用户1558438
2018/08/23
4.4K0
在 Shell 脚本中调用另一个 Shell 脚本的三种方式
fork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调用foo.sh 这个脚本,比如如果是 foo.sh 在当前目录下,就是 ./foo.sh。运行的时候 terminal 会新开一个子 Shell 执行脚本 foo.sh,子 Shell 执行的时候, 父 Shell 还在。子 Shell 执行完毕后返回父 Shell。子 Shell 从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回父 Shell。
IT运维技术圈
2022/10/24
3.5K0
Shell脚本调用另一个脚本的三种方法
如何在其它Shell脚本中调用first.sh呢?主要有三种方法:source、点号以及sh命令。
恋喵大鲤鱼
2019/03/05
12.2K0
我可以在不source脚本的情况下将变量从Bash脚本导出到环境中吗
有没有一种方法可以通过只执行 export.bash 而不 source 它获取 $VAR?
程序熵
2023/09/25
1800
我可以在不source脚本的情况下将变量从Bash脚本导出到环境中吗
我可以在一个构造函数中调用另一个构造函数么
但在 C++11 版本之前是不可以的,不过你可以通过两种方式来模拟实现(可以参见 the C++ FAQ entry),
ClearSeve
2022/02/10
3K0
Python 制作按键触发Windows通知的脚本
对于键盘没有背光灯的同学而言,切换大小写或控制Num键开关的时候没有提示,经常需要试探性地输入一些字符来判断开关是否打开,体验非常糟糕。
abs_zero
2020/12/15
1.8K0
Python 制作按键触发Windows通知的脚本
Shell脚本——函数
调用 Shell 函数时可以给它传递参数,也可以不传递。如果不传递参数,直接给出函数名字即可:
栗筝i
2022/12/01
4280
shell脚本-函数
https://www.cnblogs.com/shenxm/category/1154724.html shell脚本-函数 函数介绍 函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程。 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell 程序的一部分。 函数和shell程序比较相似,区别在于: Shell 程序在子Shell中运行 而Shell函数在当前Shell中运行。因
菲宇
2022/12/21
5790
脚本接入钉钉Actions自动触发
最近出来实习一直在忙公司的事情。学校那边说,为了我们的安全让每天签到。那个app叫蘑菇丁。不知道大🔥用过没,貌似很小众。以前的脚本写的惨不忍睹,近期看到国光哥的 Python 实现 T00ls 自动签到脚本(邮件+钉钉通知)发现脚本可以用钉钉通知涨姿势了。还发现Github 自带的 Actions 可以定时执行脚本,正好vps要到期了。。。。所以就改造了下自己的脚本。 接入钉钉 点击头像进入详情,自定义机器人。这时候需要创建一个群组 创建后会得到一个webhook地址 https://oapi.di
用户2700375
2022/06/09
8980
脚本接入钉钉Actions自动触发
复制查到到的文件到另一个目录(shell脚本)
Test:find ../../res.bak/item/ -type f -name "*.jpg" |xargs -n1 -i echo {}."abc"
meteoric
2018/11/16
1.4K0
【shell脚本】$ 在shell脚本中的使用
注释:$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数
码缘
2019/07/01
6.2K0
jenkins自动触发构建_jenkins调用bat脚本
跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。 jenkins的定时任务是用的crontab语法
全栈程序员站长
2022/09/19
1.2K0
jenkins自动触发构建_jenkins调用bat脚本
在ClickHouse中自定义脚本函数
在先前的一篇文章中我曾介绍过,如何在 ClickHouse 中用 SQL 创建 UDF 自定义函数 ,《传送门》在此。
Nauu
2022/03/29
4.3K0
Shell脚本,你会吗?
5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。
kubernetes中文社区
2019/07/23
7540
【Groovy】Groovy 脚本调用 ( Linux 中调用 Groovy 脚本 | Windows 中调用 Groovy 脚本 )
在 命令行 , Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 Groovy 脚本 ;
韩曙亮
2023/03/30
2K0
【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 调用 evaluate 方法执行 Groovy 脚本 | 参数传递 )
在 【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 ) 博客中 , 已经分析了 Groovy 脚本的本质 , Groovy 脚本继承了 groovy.lang.Script 类 ;
韩曙亮
2023/03/30
1.9K0
【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 调用 evaluate 方法执行 Groovy 脚本 | 参数传递 )
java构造函数调用另一个构造函数_java中的构造函数
* 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法
用户7886150
2021/04/29
4.5K0
python挖矿脚本代码_一个挖矿脚本
遇到一台机器偶尔cpu使用率达到80%,触发告警。登录查看后一个sshd2程序导致cpu负载高
全栈程序员站长
2022/09/14
2.3K0
[golang]写了一个可以用 go 来写脚本的工具:gosl
代码和使用说明可以看这里: http://github.com/daviddengcn/gosl
landv
2019/09/30
2K0

相似问题

我可以从另一个shell脚本调用shell脚本的函数吗?

76

可以在页面脚本之前触发扩展脚本吗?

11

可以从另一个脚本调用php脚本吗?

11

Python脚本触发另一个脚本中的方法

31

可以从另一个python脚本中运行python脚本吗?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文