簡體   English   中英

Rails - 使用Capistrano運行Rake任務

[英]Rails - Run Rake tasks with Capistrano

我在這里撓撓腦袋想知道我是不是在叫錯樹。 我有一台服務器,我已經使用Capistrano部署了一個Rails應用程序。 最近我向其中一個模型添加了一個新的數據類型,現在我需要運行一個Rake任務來更新現有的記錄。

經過大量的谷歌搜索后,我開始懷疑人們是否會使用Capistrano的Rake任務。 2013年左右的一些論壇帖子提到Capistrano支持.rake擴展。 而我發現的其他帖子表明Capistrano有自己的任務自動化系統,並且與rake不兼容。

我找到了Cape ,但我不確定這是否是我正在尋找的,因為它似乎將Rake任務轉換為帽子食譜。 可能我錯了這一點,我真的沒有任何與Capistrano合作的經驗,甚至沒有在完整的堆棧頻譜中工作。

我想知道的是:如何在遠程服務器上運行簡單的Rake任務?

為了清楚起見,我已經在最新的Ubuntu LTS上安裝了應用程序,如果內存服務,則安裝14.10。 我按照這里的教程進行操作。 我有完整的sudo訪問權限,我可以進入服務器。

提前感謝幫助一個菜鳥

如果您需要更新模型,您當然可以編寫Rails遷移 - 這將確保它在尚未運行時運行。

如果是一次性任務,在服務器上執行rake任務的最簡單方法就是通過ssh。 請參閱您提到的教程中的最后一段:

cd /opt/www/testapp/current ; bin/rake RAILS_ENV=production db:seed

要回答關於rake的原始問題:你可以通過capistrano執行rake任務,類似於你在本地執行它的方式,只能在capistrano腳本中執行。 這是一個例子:

deploy.rb:

namespace :rake do
  desc "My task"
  task :my_task do
    on roles(:app) do
      within "#{current_path}" do
        with rails_env: :production do
          execute :rake, "my_task"
          # !!!see NOTE at end of answer!!!
        end
      end
    end
  end
end

您可以通過cap -T本地查看所有上限任務。 我上面寫的capistrano任務應該顯示為cap tasks:my_rake_task

如果您希望在不進行配置的情況下運行任何可用的rake任務,請執行以下操作:

namespace :rake do
  desc "Invoke rake task"
  task :invoke do
    on roles(:app) do
      within "#{current_path}" do
        with rails_env: :production do
          execute :rake, ENV['task']
          # !!!see NOTE at end of answer!!!
        end
      end
    end
  end
end

然后你可以寫:

cap production deploy:invoke task=my:rake:task

注意:您可能希望用執行行替換

run "bin/rake RAILS_ENV=#{rails_env} #{ENV['task']}"

使用與教程相同的語法(沒有binstubs,你可能需要首先配置capistrano / bundler和capistrano / rbenv ......)

看看capistrano-rake

安裝完成后,只需執行以下操作,即可在生產/臨時服務器上運行任何rake任務,而無需使用麻煩的capistrano配方:

$ cap production invoke:rake TASK=your:rake:task

完全披露:我寫了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM