【发布时间】:2020-05-20 17:44:43
【问题描述】:
我正在编写一个 rake 任务,该任务的功能是从其他网页获取信息。为此,我使用 open-uri 和 nokogiri。我已经在开发中进行了测试,它可以完成这项工作,但后来我部署到生产服务器并失败了。
这是代码:
require 'open-uri'
require 'nokogiri'
desc 'recover eventos llerena'
task recover_eventos_llerena: :environment do
enlaces = []
# Getting index and all links
url = open(URI.parse("https://llerena.org/eventos/lista"))
page = Nokogiri::HTML(url)
page.css("a.fusion-read-more").each do |line|
enlaces.push(line.attr('href'))
end
enlaces = enlaces.uniq
#Inspecting everyone of them
enlaces.each do |link|
url = open(URI.parse(link))
page = Nokogiri::HTML(url)
title = page.css("h1").text
if Evento.find_by_titulo(title) == nil
description = page.css(".tribe-events-single-event-description.tribe-events-content.entry-content.description p").text
date = page.css(".tribe-events-abbr").attr('title')
image = page.css(".size-full").attr('src')
Evento.create!(
titulo: title,
remote_imgevento_url: image,
info: description,
fecha: Date.parse(date)
)
end
end
end
当检查 cron_error_log 我得到:
rake aborted!
NoMethodError: private method `open' called for URI:Module
/home/deploy/guialocal/releases/20200204193434/lib/tasks/example.rake:23:in `block in <top (required)>'
/home/deploy/guialocal/shared/bundle/ruby/2.4.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/cli/exec.rb:74:in `load'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/cli/exec.rb:74:in `kernel_load'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/cli/exec.rb:28:in `run'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/cli.rb:463:in `exec'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/vendor/thor/lib/thor.rb:387:in `dispatch'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/cli.rb:27:in `dispatch'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/vendor/thor/lib/thor/base.rb:466:in `start'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/cli.rb:18:in `start'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/exe/bundle:30:in `block in <top (required)>'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/lib/bundler/friendly_errors.rb:124:in `with_friendly_errors'
/home/deploy/.rvm/gems/ruby-2.4.4/gems/bundler-2.0.1/exe/bundle:22:in `<top (required)>'
/home/deploy/.rvm/gems/ruby-2.4.4/bin/bundle:23:in `load'
/home/deploy/.rvm/gems/ruby-2.4.4/bin/bundle:23:in `<main>'
Tasks: TOP => recover_eventos_llerena
(See full trace by running task with --trace)
最后我尝试在生产环境中运行控制台:
2.4.0 :001 > Rake::Task['recover_eventos_llerena'].execute
NameError: uninitialized constant Rake::Task
from (irb):1
在 Rails 2.7.0 中,有一个未来弃用的警告,我也改变了提议的新方法(没有结果):
url = URI.open("https://llerena.org/eventos/lista")
为什么会这样?
【问题讨论】:
-
你试过recommended method吗?
-
您的制作平台是什么?
-
是的,我试过了。没有改变。我正在使用 Ubuntu 服务器 18.04
标签: ruby-on-rails ruby-on-rails-5 rake rake-task open-uri