В настоящее время я пишу приложение в Ruby on Rails, которое извлекает данные (videoId в виде строки, заголовка в виде строки, эскиза в качестве строки и даты когда видео было создано как тип datetime) с YouTube и сохраняет его в базе данных.Rails: метод модели не выполняется как задача cron в разработке
Я уже тестировал API YouTube в чистом Ruby, и я знаю, что результат должен быть правильным, в частности, он должен вернуть все данные, о которых я упоминал ранее. Тем не менее, я не могу заставить его работать в Rails в качестве задания cron, использующего каждый раз при создании драгоценного камня.
Ниже у меня есть два метода, которые взаимодействуют с моей моделью. Один из них работает, а другой - нет. Тот, который не является self.create_youtube_posts
, и тот, который делает, является методом проверки, который я создал, чтобы проверить, будет ли он выполняться как задание cron, используя каждый раз, когда gem (self.create_test_posts
).
Проблема для меня, что я даже не вижу сообщений об ошибках с первым, код просто не выполняется. Если кто-то может объяснить мне, почему один метод работает, а другой нет, или просто подтолкнуть меня в правильном направлении, ваша помощь будет очень признательна. Обратите внимание, что это не вопрос о помощи в API YouTube, а скорее помощь с моим кодом Ruby.
приложение/модели/post.rb
class Post < ActiveRecord::Base
# This method is not working!
def self.create_youtube_posts
require 'faraday'
require 'rubygems'
require 'google/api_client'
require 'trollop'
developer_key = "MY_API_KEY_GOES_HERE"
youtube_api_service_name = "youtube"
youtube_api_version = "v3"
opts = Trollop::options do
opt :maxResults, 'Max results', :type => :int, :default => 18
opt :order, 'Order', :type => String, :default => 'viewCount'
opt :publishedAfter, 'Date', :default => (Time.now - 1.day).to_datetime
end
client = Google::APIClient.new(:key => developer_key,
:authorization => nil)
youtube = client.discovered_api(youtube_api_service_name, youtube_api_version)
# Call the search.list method to retrieve results matching the specified
# query term.
opts[:part] = 'id,snippet'
search_response = client.execute!(:api_method => youtube.search.list,
:parameters => opts)
search_response.data.items.each do |search_result|
case search_result.id.kind
when 'youtube#video'
# vi is short for videoId
vi = '<iframe width="425" height="349" src="http://www.youtube.com/embed/'
+ "#{search_result.id.videoId}"
+ '" frameborder="0" allowfullscreen></iframe>'
# t is short for title
t = "#{search_result.snippet.title}"
# tn is short for thumbnail
tn = "#{search_result.snippet.thumbnails.high.url}"
# dt is short for datetime
dt = "#{search_result.snippet.publishedAt}"
@post = Post.new(videoid: vi,
title: t,
thumbnail: tn,
date: dt)
@post.save
end
end
end
# This method is working fine!
def self.create_test_posts
@test_post = Post.new(videoid: "Sample video id",
title: "Sample Title",
thumbnail: "Sample Thumbnail",
date: (Time.now).to_datetime)
@test_post.save
end
end
Для дополнительной справки я включил мой файл schedule.rb, который я использую для создания хрон рабочих мест.
конфигурации/schedule.rb
every 1.day do
runner "Post.create_youtube_posts", :environment => :development
end
что выход 'кронтаб -l' – Nithin
' # Begin Когда сгенерированные задачи для: ytscrape 0 0 * * */bin/Баш -l -c 'кд/дом/кос/rails_projects/ytscrape && бен/рельсы бегун -e развитие '\'' Post.create_youtube_posts '\' '' # End Когда сгенерированные задачи для: ytscrape # Begin Всякий раз сгенерированные задачи для: /home/kos/rails_projects/ytscrape/config/schedule.rb 0 0 * * */bin/bash -l -c 'cd/h ome/kos/rails_projects/ytscrape && bin/rails runner -e development '\' Post.create_youtube_posts '\' '' # Конец Когда создаются задачи для:/home/kos/rails_projects/ytscrape/config/schedule.rb' –
Я думаю, что мой cron работает нормально. Потому что, когда я запускаю его с помощью своего рабочего метода, все выглядит нормально. –