繁体   English   中英

为什么该机器人在本地运行而不在heroku上运行?

[英]Why does this bot run locally but not on heroku?

我仍然对Rails和编程还很陌生,无论如何,请随时帮助我,谢谢!

我写了一个小机器人,可以在我的本地系统上完美运行,但是在上传时什么也不做。

我的html.erb只是调用下面的bot方法。 这是一个无限循环,但在本地服务器上,它只允许bot在页面永久加载时基本上在后台运行,这对我有用。 我知道该应用程序已正确部署,因为我注释掉了bot方法,只是将内容打印在空白页上,并且效果很好。 因此,这与我的bot方法中的某些事情有关。 唯一的问题是,当我让bot方法在heroku环境上运行时,会弹出一个页面,说“我们很抱歉出现了问题”,并告诉我检查日志,但该日志仅凭ping命令不会给我任何错误通知:

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

宝石文件

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

有任何想法吗?

对于无法更改的HTTP请求,Heroku的请求超时为30秒 因此,在离开页面加载的同时,它将继续工作,但最终将在请求超时时终止。

Heroku运行此方法的方法是使用后台工作者

您在使用Watir吗?

要在Heroku上使用PhantomJS,您需要使用Heroku PhantomJS buildpack

还要检查以下答案:

您可以在Heroku上部署Watir来生成HTML快照吗? 如果是这样,怎么办?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM