Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Heroku上,如何安排定期重置Rails应用程序的postgres数据库?_Ruby On Rails_Postgresql_Heroku - Fatal编程技术网

Ruby on rails 在Heroku上,如何安排定期重置Rails应用程序的postgres数据库?

Ruby on rails 在Heroku上,如何安排定期重置Rails应用程序的postgres数据库?,ruby-on-rails,postgresql,heroku,Ruby On Rails,Postgresql,Heroku,我正在运行一个小的演示站点。我想大约每小时重置一次数据库(自动,而不是手动)。我可以编写一个rake任务来销毁每个模型的记录。有没有更简单的方法 如何最好地实现这一点?rake db:schema:load实现了您想要的功能,尽管我从未尝试在Heroku上运行它 您也可以尝试gem,它通常用于测试环境。rake db:schema:load实现了您想要的功能,尽管我从未尝试在Heroku上运行它 您也可以尝试gem,它通常用于测试环境。请参考此链接,了解如何在heroku上自动执行rake任务

我正在运行一个小的演示站点。我想大约每小时重置一次数据库(自动,而不是手动)。我可以编写一个rake任务来销毁每个模型的记录。有没有更简单的方法


如何最好地实现这一点?

rake db:schema:load实现了您想要的功能,尽管我从未尝试在Heroku上运行它


您也可以尝试gem,它通常用于测试环境。

rake db:schema:load实现了您想要的功能,尽管我从未尝试在Heroku上运行它


您也可以尝试gem,它通常用于测试环境。

请参考此链接,了解如何在heroku上自动执行rake任务

您的rake文件将如下所示:

namespace :heroku do


  def run_command(cmd, app_name)
    Bundler.with_clean_env do
      sh build_command(cmd, app_name)
    end
  end

  def build_command(cmd, app_name)
    "heroku #{cmd} --app #{app_name}"
  end

end

请参考此链接以了解如何在heroku上自动执行rake任务

您的rake文件将如下所示:

namespace :heroku do


  def run_command(cmd, app_name)
    Bundler.with_clean_env do
      sh build_command(cmd, app_name)
    end
  end

  def build_command(cmd, app_name)
    "heroku #{cmd} --app #{app_name}"
  end

end

尝试运行rake db:setup。
但您需要随时手动运行它。

尝试
heroku运行rake db:setup
。 但是,您需要随时手动运行它。

您可以使用它来安排rake任务。如果您使用heroku run运行rake任务,那么它也可以与调度程序一起运行。

您可以使用来调度rake任务。如果您使用heroku run运行rake任务,那么它也可以与scheduler一起运行。

通过链接,我能够使其正常运行,尽管与我计划的不完全一样

首先是澄清。要在Heroku上添加scheduler插件,您必须提供您的信用卡号。我仍在了解Heroku平台的方向,但还没有做好准备。因此,我的解决方案在没有调度程序附加组件的情况下工作。相反,它在本地开发环境中作为rake任务运行,并使用heroku工具带在远程应用程序上运行reset命令

如果您希望在Heroku上运行所有操作,我认为这不会起作用,因为您无法在Heroku本身上运行
Heroku pg:reset
命令。然而,看起来这个解决方案是可行的

现在来看看我的解决办法

首先,创建以下rake文件:

# lib/tasks/heroku.rake
namespace :heroku do

  # bundle exec rake heroku:reset_db['my-app-name']
  # Note: run locally with Heroku toolbelt to reset DB on app
  desc 'Reset database with seed data'
  task :reset_db, [:app_name] do |t, args|
    run_command("pg:reset DATABASE_URL --confirm #{args.app_name}", args.app_name)
    run_command("run rake db:migrate", args.app_name)
    run_command("run rake db:seed", args.app_name)
  end

  # Helper Functions
  # Source: http://kakimotonline.com/2014/04/27/using-rake-to-automate-heroku-tasks/
  def run_command(cmd, app_name)
    Bundler.with_clean_env do
      sh build_command(cmd, app_name)
    end
  end

  def run_command_with_output(cmd, app_name)
    Bundler.with_clean_env do
      `#{build_command(cmd, app_name)}`
    end.gsub("\n", "")
  end

  def build_command(cmd, app_name)
    "heroku #{cmd} --app #{app_name}"
  end
end
现在,您可以通过在本地环境中使用应用程序名运行以下rake命令来重置数据库(为应用程序名运行
heroku apps
):

如果您想像我一样安排它定期运行,请向本地crontab添加一个作业(这比复制上面的行要复杂一些):

有关设置cron作业以使用rbenv运行rake任务的更多信息,请参阅。

下面的链接,我能够实现这一点,尽管并没有完全按照我的计划进行

首先是澄清。要在Heroku上添加scheduler插件,您必须提供您的信用卡号。我仍在了解Heroku平台的方向,但还没有做好准备。因此,我的解决方案在没有调度程序附加组件的情况下工作。相反,它在本地开发环境中作为rake任务运行,并使用heroku工具带在远程应用程序上运行reset命令

如果您希望在Heroku上运行所有操作,我认为这不会起作用,因为您无法在Heroku本身上运行
Heroku pg:reset
命令。然而,看起来这个解决方案是可行的

现在来看看我的解决办法

首先,创建以下rake文件:

# lib/tasks/heroku.rake
namespace :heroku do

  # bundle exec rake heroku:reset_db['my-app-name']
  # Note: run locally with Heroku toolbelt to reset DB on app
  desc 'Reset database with seed data'
  task :reset_db, [:app_name] do |t, args|
    run_command("pg:reset DATABASE_URL --confirm #{args.app_name}", args.app_name)
    run_command("run rake db:migrate", args.app_name)
    run_command("run rake db:seed", args.app_name)
  end

  # Helper Functions
  # Source: http://kakimotonline.com/2014/04/27/using-rake-to-automate-heroku-tasks/
  def run_command(cmd, app_name)
    Bundler.with_clean_env do
      sh build_command(cmd, app_name)
    end
  end

  def run_command_with_output(cmd, app_name)
    Bundler.with_clean_env do
      `#{build_command(cmd, app_name)}`
    end.gsub("\n", "")
  end

  def build_command(cmd, app_name)
    "heroku #{cmd} --app #{app_name}"
  end
end
现在,您可以通过在本地环境中使用应用程序名运行以下rake命令来重置数据库(为应用程序名运行
heroku apps
):

如果您想像我一样安排它定期运行,请向本地crontab添加一个作业(这比复制上面的行要复杂一些):


有关设置cron作业以使用rbenv运行rake任务的更多信息,请参阅。

您的答案与我的问题最接近。您在回答末尾引用的
build命令
任务似乎对我有用。复制粘贴的代码中的
migrate
restart
命令不相关。调度器gem也是如此(Heroku提供了一个调度器)。如果你想清理这个,我可以确认它有效,我会接受这个。最后,你的回答没有完全回答我的问题。但我投了你一票,因为你帮助我找到了解决办法。你的答案看起来最接近于回答我的问题。您在回答末尾引用的
build命令
任务似乎对我有用。复制粘贴的代码中的
migrate
restart
命令不相关。调度器gem也是如此(Heroku提供了一个调度器)。如果你想清理这个,我可以确认它有效,我会接受这个。最后,你的回答没有完全回答我的问题。但我给了你一票,因为你帮我找到了解决办法。