2015-09-06 7 views
1

我想寫一個腳本,我可以配置一個cron在我的Rails應用程序下面每24小時運行一次。運行影響數據庫的日常腳本

script.rb

User.all.each do |user| 
    days = user[:days] 

    if days >= 1 
     days = days - 1 
    end 

    user.update_attribute(:days, days) 
end 

但是,每當我跑,我得到這個錯誤:

uninitialized constant User (NameError)

什麼錯?

回答

2

如果你在Rails應用程序的主目錄,然後簡單地說:

rails runner -e production script.rb 

對於cron的(假設,script.rb是家目錄再次):

  1. 找出完整路徑bundlewhich bundle
  2. 在crontab加(變化包和相應的項目路徑):

    0 * * * * cd /project_home && /bundle_executable exec rails runner -e production script.rb

+0

未定義的局部變量或方法'腳本」主:對象(NameError) –

+0

你運行'軌從項目的主目錄亞軍script.rb'? – dimakura

+0

nope,從子目錄中,我會移動的東西。 –

0

另一種方法是require_relative 'config/environment.rb'(調整路徑以您的使用情況),在該腳本的頂部;性能受到輕微影響,但如果您每天只運行一次,幾秒鐘的啓動懲罰將無關緊要。

此外,您可能需要設置RAILS_ENV適當地訪問適當的數據庫表。

0

我總是用whenever來管理我的cron作業。

安裝whenever,然後添加下面的腳本到您的config/schedule.rb

every :day do 
    runner 'User.all.each {|user| user.decrement!(:days) if user.days > 0}' 
end 

然後從你的終端上運行whenever -w

相關問題