Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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
PHP跟踪MySQL数据库的最新更新以推送到Rails应用程序?_Php_Mysql_Ruby On Rails - Fatal编程技术网

PHP跟踪MySQL数据库的最新更新以推送到Rails应用程序?

PHP跟踪MySQL数据库的最新更新以推送到Rails应用程序?,php,mysql,ruby-on-rails,Php,Mysql,Ruby On Rails,我有一个MySQL 5数据库,每5分钟从一个我无法控制的专有数据库更新一次(在编程或数据库访问方面)。MySQL数据库是这个专有数据库的镜像,专有数据库负责更新过程(也就是说,在调用更新过程时我不能添加钩子) 我有另一个完全独立的Rails应用程序,我需要从外部MySQL数据库导入记录(Rails应用程序由PostgreSQL提供支持,远程托管) 所以。。。请原谅这种设置的极端低效性(这是一个过渡中的系统),我需要的是:一个PHP脚本,它可以在MySQL数据库更新时轮询或调用(无论更新是更新记录

我有一个MySQL 5数据库,每5分钟从一个我无法控制的专有数据库更新一次(在编程或数据库访问方面)。MySQL数据库是这个专有数据库的镜像,专有数据库负责更新过程(也就是说,在调用更新过程时我不能添加钩子)

我有另一个完全独立的Rails应用程序,我需要从外部MySQL数据库导入记录(Rails应用程序由PostgreSQL提供支持,远程托管)

所以。。。请原谅这种设置的极端低效性(这是一个过渡中的系统),我需要的是:一个PHP脚本,它可以在MySQL数据库更新时轮询或调用(无论更新是更新记录信息、创建新记录还是删除现有记录等),然后推送该信息(JSON)通过对Rails应用程序的POST请求

我已经编写了一个PHP脚本,可以从MySQL中提取数据并为我的Rails应用程序解析它,但我不知道的是如何(a)让脚本在更新时轮询或调用,或者(b)如何告诉它只查找最新的更改(自上次调查以来,请记住可能有多条记录被更改/创建/删除)

有人能对此提出建议吗



作为一个必然的问题,如果有人知道如何跳过PHP并直接从Rails到外部MySQL数据库执行相同的过程,我(显然)更喜欢这种方法。不过,为了至少获得一个可行的解决方案,我很乐意接受Rails或PHP解决方案。

以下是一种在Rails中实现这一切的方法:

设置一个每五分钟启动一次的cron作业。它要么运行rake任务,要么在Rails应用程序中运行curl的某个URL(最好包含一个安全令牌,只是为了更好的衡量)。我更喜欢后者——它更简单,并且不启动新的进程

cron作业触发的操作可以查看每个表中的created_at列,并确定哪些记录可能是新的。对于created_at确定的潜在新记录,请检查它们是否确实是新的,如果是,请将它们写入PostgreSQL DB。检查记录是否是新的有两种方法:

  • 如果MySQL和PostgreSQL之间的主键总是匹配的,您可以尝试保存记录,显式设置主键。如果记录已经保存,您将得到一个异常,然后可以捕获该异常

  • 如果不能保证键匹配,则可以对照其他唯一值进行检查。或者,如果没有可以使用的唯一值,则可以使用单独的表来告诉您哪些记录已被复制。该表中的旧记录可以定期清除,因此不会浪费太多空间

  • 当然,所有这些都是在模型中完成的,而不是在控制器中完成的。如果您没有在列中创建_,请添加它们,并确保在定期更新时写入它们,最有可能的方法是在MySQL中设置默认值

    让你的Rails应用程序连接到MySQL数据库应该不会太难。以下是一些相关信息: