Я все еще очень новичок в рельсах и программировании вообще, пожалуйста, помогите мне в любом случае, спасибо заранее!Почему этот бот работает локально, но не на героку?
Я написал небольшой бот, который отлично работает на моей локальной системе, но затем ничего не делает, когда я его загружаю.
Мой html.erb просто вызывает метод бота ниже. Это бесконечный цикл, но на локальном сервере он позволяет боту в основном работать в фоновом режиме, пока страница загружается навсегда, что работает для меня. Я знаю, что приложение развернуто правильно, потому что я прокомментировал метод бота и просто распечатал все на пустой странице и отлично работает. Так что это связано с чем-то в моем методе бота. Единственная проблема заключается в том, что когда я покидаю метод бота, запущенный в среде heroku, появляется всплывающее сообщение: «Мы сожалеем, что что-то пошло не так» и говорит мне проверять журнал, за исключением того, что журнал не дает мне никаких ошибок только пинг уведомления:
Apr 26 23:34:08 guarded-falls-5003 heroku/router: at=info method=GET path="/" host=guarded-falls-5003.herokuapp.com request_id=ae3616c7-2ff6-4bdd-9738-03a2cc291f96 fwd="50.31.164.139" dyno=web.1 connect=2ms service=13ms status=500 bytes=1754
Это controller.rb
require 'rubygems'
require 'watir-webdriver'
require 'phantomjs'
def time(t)
mm, ss = t.divmod(60)
hh, mm = mm.divmod(60)
dd, hh = hh.divmod(24)
return "%d days, %d hours, %d minutes and %d seconds " % [dd, hh, mm, ss]
end
def remaining_time(delay)
time = Time.now.to_f
fin = delay + time
while fin > time
time = Time.now.to_f
@finished = "Current delay is #{time(fin-time)} \r"
sleep 1;
end
print "\n"
end
####################################################################
# bot #
####################################################################
def bot
# bots login information
name = "*******"
email = "**********"
password = "*********"
#channel they are posting to on output website
channel = "Sports"
####################################################################
# set the following url to the channel you would like to pull from #
####################################################################
# input website (video)
url = "**************"
####################################################################
# bot code #
####################################################################
video = ""
########################### Loop ###################################
loop do
# Starts the Browser, enters URL, and goes to the videos page
browser = Watir::Browser.new :phantomjs
browser.goto(url + "/videos")
# click on the class for the link of the video. Note that this just clicks on the first one it finds
browser.link(:class, "yt-uix-sessionlink yt-uix-tile-link spf-link yt-ui-ellipsis yt-ui-ellipsis-2").click
# Checks if the current video is already stored as the video variable
if video != browser.url
# Set video variable to current url
video = browser.url
# Close and open a new video because phantomjs bugs out when you try
# to change websites on an already existing window
browser.close
browser = Watir::Browser.new :phantomjs
# goto output website sign in page and sign in
browser.goto "**************"
browser.text_field(:id, "user_email").set(email)
browser.text_field(:id, "user_password").set(password)
browser.button(:value,"Sign in").click
# Upload the video (resize because search bar is hidden at default size)
browser.window.resize_to(1600, 1000)
browser.text_field(:id, "q").set(video)
browser.button(:text, "Upload").click
browser.select_list(:id, "video_channel_id").select(channel)
# browser.button(:text,"Create Video").click
puts "uploaded #{video}"
remaining_time(delay)
$stdout.flush
sleep(delay)
# Exit Browser
browser.close
else
browser.close
puts "Did not upload anything. The video has already been uploaded."
remaining_time(delay)
$stdout.flush
sleep(delay)
end
end
end
Gemfile
source 'https://rubygems.org'
gem 'newrelic_rpm'
gem 'phantomjs'
gem 'watir-webdriver'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use Unicorn as the app server
# gem 'unicorn'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug'
# Access an IRB console on exception pages or by using <%= console %> in views
gem 'web-console', '~> 2.0'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
end
Любые идеи?
привет и добро пожаловать к переполнению стека. Таким образом, моей первой простой рекомендацией будет «отладка отпечатка» ... т. Е. Добавить логические вызовы в каждую из основных ветвей (до цикла, только внутри циклов и т. Д.), Каждый с разными сообщениями, объясняющими, в какой точке кода вы находитесь до ... и посмотреть, в какой момент код доходит до того, как он умрет. –
Моей другой рекомендацией было бы: удалить цикл ... проверить, что произойдет, если бот просто пытается это сделать один раз, а затем закончится ... –