【问题标题】:View Logs in Rake Task (Production)在 Rake 任务(生产)中查看日志
【发布时间】:2015-03-11 18:21:31
【问题描述】:

当我在生产中运行这个 rake 任务(到登台应用程序)时,我希望得到一个将日志发送到终端的答案。

我创建了一个 rake 任务来更新我们数据库中的现有记录。我首先在本地尝试,它运行得很快,得到了我想要的输出。在本地,我有 4295 首曲目。现在我正在尝试在我的暂存数据库上运行它,它有 17,418 个轨道。

我运行heroku run rake db:track_rank -a staging-appname 并得到这个:

Running `rake db:track_rank` attached to terminal... up, run.8608
Connecting to database specified by DATABASE_URL
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Starting the New Relic agent in "production" environment.
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : To prevent agent startup add a NEWRELIC_AGENT_ENABLED=false environment variable or modify the "production" section of your newrelic.yml.
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Reading configuration from config/newrelic.yml
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Environment: production
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : No known dispatcher detected.
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Application: Marmoset Music
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : delayed_job not available: No DJ worker present
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing Sinatra instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing Dalli Memcache instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing Net instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing deferred Rack instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing Rack::Builder middleware instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing Rails 3+ middleware instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing ActiveRecord instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing legacy Excon instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing DelayedJob instrumentation [part 1/2]
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing Rails 3 Controller instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing Rails 3.1/3.2 view instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Installing Rails3 Error instrumentation
** [NewRelic][03/11/15 18:04:40 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Finished instrumentation
** [NewRelic][03/11/15 18:04:41 +0000 49202e1b-0783-4094-bf1a-969e03b61bab (3)] INFO : Reporting to: https://rpm.newrelic.com/accounts/375675/applications/2431422
Updating track's rank points in group #1
Dalli/SASL authenticating as 021dd5
Dalli/SASL: 021dd5

它已经在那里呆了大约 12 分钟,所以我不确定它是否真的对“第 1 组”有任何影响。

如何将一些日志发送到终端以查看发生了什么?

这是我的 rake 任务:

desc "Updates all exisiting tracks rank"


namespace :db do
    task :track_rank => :environment do 

      batch_index = 1
        puts "Updating track's rank points in group ##{batch_index}"

            three_weeks_ago = 21.days.ago.to_date

            Track.find_in_batches do |group|

                group.each do |track|


                    listens = track.listens_count
                    downloads = track.downloads_count
                    purchases = track.purchases_count
                    staff_pick = 0
                    new_track = 0


                    if track.staff_pick?
                        staff_pick += 1
                    end

                    if track.created_at.to_date > three_weeks_ago
                        new_track += 2000
                    end


                    downloads *= 60
                    purchases *= 150
                    staff_pick *= 1000

                    rank_total = listens + downloads + purchases + staff_pick + new_track

                    if rank_total > 0
                        track.increment!(:rank, by = rank_total)
                    end

              end       
              batch_index +=1       
          end       

        puts "Tracks updated!"
    end
end

【问题讨论】:

    标签: ruby-on-rails logging heroku rake


    【解决方案1】:

    最简单的方法是让 Rails 明确记录 rake 任务的进度和/或结果。只需改变这个:

    puts "Tracks updated!"
    

    到这里

    Rails.logger.ingo "Tracks updated!" 
    

    你也可以在中间加一些调试日志,不过看你自己了。

    【讨论】:

    • Rails.logger 没有从 rake 任务中将任何内容放入 Heroku 日志中,我可以看到。你得到的只是“开始......停止”。您煞费苦心地告诉您的任务输出以进行故障排除的所有内容都丢失了。
    • @JosephK 这可能是因为 rake 任务没有时间将内容从缓冲区中清除。您需要手动刷新它们。
    【解决方案2】:

    运行heroku logs

    你也可以过滤日志,看看types of logs

    【讨论】:

      【解决方案3】:

      Heroku 似乎在记录 rake 任务方面存在问题。为了避免这种情况,您需要以分离模式运行 rake 任务。

      heroku run:detached rake db:track_rank
      

      来源:https://www.salsify.com/blog/engineering/capturing-logs-from-rake-tasks-and-rails-console-on-heroku

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-16
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        相关资源
        最近更新 更多