帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:harvest  CKAN  ext  HAR  
Remote harvesting extension for CKAN

  • 源代码名称:ckanext-harvest
  • 源代码网址:http://www.github.com/ckan/ckanext-harvest
  • ckanext-harvest源代码文档
  • ckanext-harvest源代码下载
  • Git URL:
    git://www.github.com/ckan/ckanext-harvest.git
  • Git Clone代码到本地:
    git clone http://www.github.com/ckan/ckanext-harvest
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/ckan/ckanext-harvest
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • ckanext收获- 远程收获扩展 https://travis-ci.org/ckan/ckanext-harvest.svg?branch=master

    这个扩展为CKAN扩展提供了一个通用的获取框架,并向CKAN添加一个CLI和一个WUI来管理收集源和作业。

    安装

    这个扩展需要 CKAN v2.0或者更高版本上的CKAN,以及它所获得的CKANs 。 但是,你不太可能遇到运行版本低于 2.0的CKAN 。

    收获扩展可以使用两个不同的后端。 你可以以选择根据你的需要而选择的任何选项,但是rtc已经经更稳定和可以靠,因这里推荐:

    • Redis ( 推荐推荐): 要安装它,运行:

      sudo apt-get update
      sudo apt-get install redis-server

      在CKAN配置文件中,添加 [app:main] 部分:

      ckan.harvest.mq.type = redis
    • RabbitMQ: 要安装它,运行:

      sudo apt-get update
      sudo apt-get install rabbitmq-server

      在CKAN配置文件中,添加 [app:main] 部分:

      ckan.harvest.mq.type = amqp

    激活你的CKAN虚拟环境,例如:

    $./usr/lib/ckan/default/bin/activate

    将ckanext收获 python 软件包安装到你的虚拟环境中:

    (pyenv) $ pip install -e git+https://github.com/ckan/ckanext-harvest.git#egg=ckanext-harvest

    安装扩展( 根据前面步骤中安装ckanext收获的位置调整路径) 所需的python 模块:

    (pyenv) $ cd/usr/lib/ckan/default/src/ckanext-harvest/
    (pyenv) $ pip install -r pip-requirements.txt

    如果你需要它,请确保CKAN配置ini文件包含收获主插件,以及用于CKAN实例的收割机。

    ckan.plugins = harvest ckan_harvester

    如果尚不能在上一步中完成,请定义在 [app:main] 部分( 默认为 amqp ) 中使用的ckan.harvest.mq.type 选项的后端:

    ckan.harvest.mq.type = redis

    后端有许多配置选项可用。 这些不需要修改,如果你正在使用默认的Redis或者RabbitMQ安装( 步骤 1 ) 。 但是,你可能希望将自定义选项添加到CKAN配置文件中的[app:main] 部分。 列表 below 显示可用选项及其默认值:

    • Redis:
      • ckan.harvest.mq.hostname ( 本地)
      • ckan.harvest.mq.port ( 6379 )
      • ckan.harvest.mq.redis_db ( 0 )
    • RabbitMQ:
      • ckan.harvest.mq.user_id ( 来宾)
      • ckan.harvest.mq.password ( 来宾)
      • ckan.harvest.mq.hostname ( 本地)
      • ckan.harvest.mq.port ( 5672 )
      • ckan.harvest.mq.virtual_host (/)

    英镑注释:对于不同的CKAN实例使用相同的后端服务器( Redis或者 RabbitMQ ) 是安全的,只要它们具有不同的站点 id 。 ckan.site_id 配置选项( 或者 default ) 将用于命名空间相关的内容:

    • 在RabbitMQ上,它将用于 NAME 所使用的队列,例如 ckan.harvest.site1.gatherckan.harvest.site1.fetch
    • 它将命名使用的密钥,所以只有相关的实例获取它们,如 site1:harvest_job_idsite1:harvest_object__id:804f114a-8f68-4e7c-b124-3eb00f66202f

    配置

    运行以下命令在数据库( 。确保激活 pyenv ) 中创建必要的表:

    (pyenv) $ paster --plugin=ckanext-harvest harvester initdb --config=/etc/ckan/default/production.ini

    最后,重新启动CKAN以使更改生效:

    sudo服务apache2重新启动

    安装后,获取源列表应在/harvest, 下面可用:

    http://localhost/harvest

    数据库记录器配置( 可选)

    默认情况下禁用对数据库的日志记录。 如果希望将CKAN收获日志公开给 CKAN API,需要使用以下配置参数正确配置记录器:

    ckan.harvest.log_scope = 0
    • -1 - 不记录数据库- 默认值
    • 0 - 记录所有内容
    • 1 - 模型,逻辑,操作,逻辑,验证器,采集器
    • 2 - 模型,逻辑,logic.validators
    • 3 - 模型,logic.action
    • 4 - logic.action
    • 5 - 模型
    • 6 - 插件
    • 7 - 挖掘器

    使用以下配置参数( 在 [app:main] 部分)的清理机制的安装时间帧( 天数):

    ckan.harvest.log_timeframe = 10

    如果没有值,默认值为 30天。

    数据库记录器的安装日志级别:

    ckan.harvest.log_level = info

    如果未设置日志级别,则默认为 debug

    API用法

    你可以通过API访问CKAN收获日志:

    $ curl {ckan_url}/api/3/action/harvest_log_list

    用CKAN实例中的url替换 {ckan_url} 。

    允许的参数包括:

    • 级别( 按级别筛选日志记录)
    • 限制( 用于分页)
    • offset ( 用于分页)

    e.g 。使用日志级别信息获取所有日志:

    $ curl {ckan_url}/api/3/action/harvest_log_list?level=info

    {

    ,":" http://127.0.0.1 :5000/api/3/action/help_show?name=harvest_log_list"

    "成功":真

    "":[{"content":"Sent job aa987717-2316-4e47-b0f2-cbddfb4c4dfc to the gather queue","level":"INFO","created":" 2016-06-03 10:59:40. 961657"},{"content":"Sent 作业aa987717-2316-4e47-b0f2-cbddfb4c4dfc到收集队列","级别":"信息","已经创建":"2016-06-03 10:59:40. 951548"} ]

    }

    命令行 接口

    下面的操作可以从 命令行 运行,如下所述:

    harvester initdb
     - Creates the necessary tables in the database
    harvester source {name} {url} {type} [{title}] [{active}] [{owner_org}] [{frequency}] [{config}]
     - create new harvest source
    harvester source {source-id/name}
     - shows a harvest source
    harvester rmsource {source-id/name}
     - remove (deactivate) a harvester source, whilst leaving any related
     datasets, jobs and objects
    harvester clearsource {source-id/name}
     - clears all datasets, jobs and objects related to a harvest source,
     but keeps the source itself
    harvester clearsource_history [{source-id}]
     - If no source id is given the history for all harvest sources (maximum is 1000)
     will be cleared.
     Clears all jobs and objects related to a harvest source, but keeps the source
     itself. The datasets imported from the harvest source will **NOT** be deleted!!!
     If a source id is given, it only clears the history of the harvest source with
     the given source id.
    harvester sources [all]
     - lists harvest sources
     If 'all' is defined, it also shows the Inactive sources
    harvester job {source-id/name}
     - create new harvest job
    harvester jobs
     - lists harvest jobs
    harvester job_abort {source-id/name}
     - marks a job as"Aborted" so that the source can be restarted afresh.
     It ensures that the job's harvest objects status are also marked
     finished. You should ensure that neither the job nor its objects are
     currently in the gather/fetch queues.
    harvester run
     - starts any harvest jobs that have been created by putting them onto
     the gather queue. Also checks running jobs - if finished it
     changes their status to Finished.
    harvester run_test {source-id/name}
     - runs a harvest - for testing only.
     This does all the stages of the harvest (creates job, gather, fetch,
     import) without involving the web UI or the queue backends. This is
     useful for testing a harvester without having to fire up
     gather/fetch_consumer processes, as is done in production.
    harvester gather_consumer
     - starts the consumer for the gathering queue
    harvester fetch_consumer
     - starts the consumer for the fetching queue
    harvester purge_queues
     - removes all jobs from fetch and gather queue
     WARNING: if using Redis, this command purges all data in the current
     Redis database
    harvester clean_harvest_log
     - Clean-up mechanism for the harvest log table.
     You can configure the time frame through the configuration
     parameter 'ckan.harvest.log_timeframe'. The default time frame is 30 days
    harvester [-j] [-o] [--segments={segments}] import [{source-id}]
     - perform the import stage with the last fetched objects, for a certain
     source or a single harvest object. Please note that no objects will
     be fetched from the remote server. It will only affect the objects
     already present in the database.
     To import a particular harvest source, specify its id as an argument.
     To import a particular harvest object use the -o option.
     To import a particular package use the -p option.
     You will need to specify the -j flag in cases where the datasets are
     not yet created (e.g. first harvest, or all previous harvests have
     failed)
     The --segments flag allows to define a string containing hex digits that represent which of
     the 16 harvest object segments to import. e.g. 15af will run segments 1,5,a,f
    harvester job-all
     - create new harvest jobs for all active sources.
    harvester reindex
     - reindexes the harvest source datasets

    命令应该与pyenv一起运行,并引用你的CKAN配置 file:

    (pyenv) $ paster --plugin=ckanext-harvest harvester sources --config=/etc/ckan/default/production.ini

    授权

    从 CKAN 2.0开始,收获源的行为与数据集的( 它们实际上是作为数据集类型在内部实现的) 完全相同。 这意味着可以搜索和面化,并且同样的授权规则可以应用到它们。 默认的授权设置基于组织。

    查看关于核心的授权文档,了解如何根据需要配置实例。

    CKAN收割机

    插件包括用于远程CKAN实例的收割机。 要使用它,你需要将ckan_harvester插件添加到你的选项 file:

    ckan.plugins = harvest ckan_harvester

    添加后,'ckan'选项应出现在'新收获源'窗体中。

    CKAN收集器支持许多配置选项来控制它们的行为。 这些需要在配置表单字段中定义为JSON对象。 当前支持的配置选项包括:

    • api_version: 你可以以强制收集器使用 CKAN API的版本 1或者 2. 默认值是2。
    • default_tags: 将添加到所有已经收集数据集的标记的列表。 标记不需要以前存在。 这里字段获取标记 dicts ( 请参阅示例)的列表,该列表允许你指定词汇表。
    • default_groups: 组id或者名称的列表,收集的数据集将被添加到。 组必须存在。
    • default_extras: 将添加到已经收集数据集的附加数据的key-value 对的字典。 可以使用以下替换字符串,在创建或者更新数据集之前将替换这些字符串:
      • {dataset_id}
      • {harvest_source_id}
      • {harvest_source_url} # 将删除尾部正斜杠(/)
      • {harvest_source_title}
      • {harvest_job_id}
      • {harvest_object_id}
    • override_extras: 即使在远程数据集中已经存在默认附加项,也会指派它们。 默认为 false ( 只添加不存在的附加项) 。
    • 用户:将运行获取进程的用户。 请注意,这里用户需要有创建包的权限,如果定义了默认组,用户必须具有指定包的权限。
    • api_key: 如果远程CKAN实例限制了对API的访问,你可以以提供一个 CKAN API密钥,它将被发送到任何请求。
    • read_only: 在只读模式下创建收获的软件包。 只有执行获取( 在前一个设置中定义的,或者'收获'系统管理员)的用户才能编辑和管理从这里收集源创建的包。 登录用户和访客只能阅读他们。
    • force_all: 默认情况下,在第一次收集后,收集器将在最后收集后从远程站点收集修改后的包。 将这里属性设置为 true 将强制收集器收集所有远程软件包,而不考虑修改日期。 默认值为 false 。
    • remote_groups: 默认情况下,忽略远程组。 设置这里属性可以使收割机导入远程组。 有两个替代方案将它设置为'only_local'将只导入本地CKAN中已经存在名称/in的组。 将它的设置为'创建'将尝试通过从远程CKAN复制详细信息来创建组。
    • remote_orgs: 默认情况下,忽略远程组织。 设置这里属性可以让harvester导入远程组织。 有两种选择。将它设置为'only_local'将只导入本地CKAN中已经存在的组织。 将它的设置为'创建'将尝试通过从远程CKAN复制详细信息来创建组织。
    • clean_tags: 默认情况下,标签不会被删除,这些字符。空格和大写字母都会显示。 如果这里选项设置为 true,则重音字符将被它的ascii等效字符替换,大写字母替换为 lowercase 。 将这里选项设置为 false的效果与保留它的效果相同。
    • organizations_filter_include: 这里配置选项允许你指定远程组织名称列表( 比如 ) 。 "gov政府"是组织 http://catalog.data.gov/organization/arkansas-gov的NAME 。) 。 如果这里属性具有值,则只获取这些组织中的某个组织中的数据集。 将跳过所有其他数据集。 organizations_filter_include或者organizations_filter_exclude中只有一个应该配置。
    • organizations_filter_exclude: 这里配置选项允许你指定远程组织名称列表( 比如 ) 。 "gov政府"是组织 http://catalog.data.gov/organization/arkansas-gov的NAME 。) 。 如果设置这里属性,则除非它属于这里选项中的某个组织,否则将收集来自远程源的所有数据集。 organizations_filter_exclude或者organizations_filter_include中只有一个应该配置。

    下面是一个配置对象( 必须在配置字段中输入的那个)的示例:

    {
    "api_version": 1,
    "default_tags": [{"name":"geo"}, {"name":"namibia"}],
    "default_groups": ["science","spend-data"],
    "default_extras": {"encoding":"utf8","harvest_url":"{harvest_source_url}/dataset/{dataset_id}"},
    "override_extras": true,
    "organizations_filter_include": [],
    "organizations_filter_exclude": ["remote-organization"],
    "user":"harverster-user",
    "api_key":"<REMOTE_API_KEY>",
    "read_only": true,
    "remote_groups":"only_local",
    "remote_orgs":"create"
    }

    获取接口

    扩展可以实现收获机接口来执行收割操作。 获取过程分为三个阶段:

    • 收集 阶段将编译下一步( 比如 ) 中需要获取的所有资源标识符。 在CSW服务器中,它将执行GetRecords操作) 。
    • 获取阶段获取远程对象的内容并将它的存储在数据库( 。 在CSW服务器中,它将执行n 个GetRecordById操作。
    • 导入阶段对获取的资源( 通常创建一个CKAN包,但它可以是任何扩展所需的东西) 执行任何必要的操作。

    要实现获取接口的插件必须提供以下方法:

    from ckan.plugins.core import SingletonPlugin, implements
    from ckanext.harvest.interfaces import IHarvester
    class MyHarvester(SingletonPlugin):
    '''
    A Test Harvester
    '''
    implements(IHarvester)
    def info(self):
     '''
     Harvesting implementations must provide this method, which will return
     a dictionary containing different descriptors of the harvester. The
     returned dictionary should contain:
     * name: machine-readable name. This will be the value stored in the
     database, and the one used by ckanext-harvest to call the appropiate
     harvester.
     * title: human-readable name. This will appear in the form's select box
     in the WUI.
     * description: a small description of what the harvester does. This
     will appear on the form as a guidance to the user.
     A complete example may be::
     {
     'name': 'csw',
     'title': 'CSW Server',
     'description': 'A server that implements OGC's Catalog Service
     for the Web (CSW) standard'
     }
     :returns: A dictionary with the harvester descriptors
     '''
    def validate_config(self, config):
     '''
     [optional]
     Harvesters can provide this method to validate the configuration
     entered in the form. It should return a single string, which will be
     stored in the database. Exceptions raised will be shown in the form's
     error messages.
     :param harvest_object_id: Config string coming from the form
     :returns: A string with the validated configuration options
     '''
    def get_original_url(self, harvest_object_id):
     '''
     [optional]
     This optional but very recommended method allows harvesters to return
     the URL to the original remote document, given a Harvest Object id.
     Note that getting the harvest object you have access to its guid as
     well as the object source, which has the URL.
     This URL will be used on error reports to help publishers link to the
     original document that has the errors. If this method is not provided
     or no URL is returned, only a link to the local copy of the remote
     document will be shown.
     Examples:
     * For a CKAN record: http://{ckan-instance}/api/rest/{guid}
     * For a WAF record: http://{waf-root}/{file-name}
     * For a CSW record: http://{csw-server}/?Request=GetElementById&Id={guid}&...
     :param harvest_object_id: HarvestObject id
     :returns: A string with the URL to the original document
     '''
    def gather_stage(self, harvest_job):
     '''
     The gather stage will receive a HarvestJob object and will be
     responsible for:
     - gathering all the necessary objects to fetch on a later.
     stage (e.g. for a CSW server, perform a GetRecords request)
     - creating the necessary HarvestObjects in the database, specifying
     the guid and a reference to its job. The HarvestObjects need a
     reference date with the last modified date for the resource, this
     may need to be set in a different stage depending on the type of
     source.
     - creating and storing any suitable HarvestGatherErrors that may
     occur.
     - returning a list with all the ids of the created HarvestObjects.
     - to abort the harvest, create a HarvestGatherError and raise an
     exception. Any created HarvestObjects will be deleted.
     :param harvest_job: HarvestJob object
     :returns: A list of HarvestObject ids
     '''
    def fetch_stage(self, harvest_object):
     '''
     The fetch stage will receive a HarvestObject object and will be
     responsible for:
     - getting the contents of the remote object (e.g. for a CSW server,
     perform a GetRecordById request).
     - saving the content in the provided HarvestObject.
     - creating and storing any suitable HarvestObjectErrors that may
     occur.
     - returning True if everything is ok (ie the object should now be
     imported),"unchanged" if the object didn't need harvesting after
     all (ie no error, but don't continue to import stage) or False if
     there were errors.
     :param harvest_object: HarvestObject object
     :returns: True if successful, 'unchanged' if nothing to import after
     all, False if not successful
     '''
    def import_stage(self, harvest_object):
     '''
     The import stage will receive a HarvestObject object and will be
     responsible for:
     - performing any necessary action with the fetched object (e.g.
     create, update or delete a CKAN package).
     Note: if this stage creates or updates a package, a reference
     to the package should be added to the HarvestObject.
     - setting the HarvestObject.package (if there is one)
     - setting the HarvestObject.current for this harvest:
     - True if successfully created/updated
     - False if successfully deleted
     - setting HarvestObject.current to False for previous harvest
     objects of this harvest source if the action was successful.
     - creating and storing any suitable HarvestObjectErrors that may
     occur.
     - creating the HarvestObject - Package relation (if necessary)
     - returning True if the action was done,"unchanged" if the object
     didn't need harvesting after all or False if there were errors.
     NB You can run this stage repeatedly using 'paster harvest import'.
     :param harvest_object: HarvestObject object
     :returns: True if the action was done,"unchanged" if the object didn't
     need harvesting after all or False if there were errors.
     '''

    有关如何实现收割接口的示例,请参见CKAN收集器:

    ckanext-harvest/ckanext/harvest/harvesters/ckanharvester.py

    你还可以在这里找到其他定制收集器的示例:

    正在运行获取作业

    有两种方法可以运行收割:

    1. ``harvester run_test`` for the command-line, suitable for testing
    2. ``harvester run`` used by the Web UI and scheduled runs

    收割机 run_test

    你只需使用 run_test 命令就可以运行 harvester 。 这对于在控制台中使用一个命令运行一个命令并查看所有输出 inline 很方便。 它在同一进程中运行收集。获取和导入阶段。

    这种方法用于开发收割机,因为你可以在收割机中插入断点,并在没有 Having的情况下重新运行收割器和进程,每次都能。 这里外,由于它不使用队列后端,因这里它不会干扰可以能在后台进行的它的他源的收益。

    但是,如果使用这种方式运行,如果 gather_stage 。fetch_stage或者import_stage引发异常,则不会捕获异常,因为 harvester run 在测试这里方面时会稍有不同,因此在测试这里方面时最好使用。

    高速收割机运行

    当用户在 Web UI中启动一个收集作业,或者者由计划收获启动时,收获将由 harvester run 命令启动。 这是生产系统中的常规方法,而且规模很好。

    在这种情况下,获取扩展插件使用两个不同的队列: 处理收集的对象,另一个处理获取和导入的集合。 要启动用户运行以下命令( 确保你的python 环境已经激活):

    (pyenv) $ paster --plugin=ckanext-harvest harvester gather_consumer --config=/etc/ckan/default/production.ini

    在另一个终端上,运行以下命令:

    (pyenv) $ paster --plugin=ckanext-harvest harvester fetch_consumer --config=/etc/ckan/default/production.ini

    最后,在第三个控制台上,运行以下命令以启动任何待定的获取作业:

    (pyenv) $ paster --plugin=ckanext-harvest harvester run --config=/etc/ckan/default/production.ini

    run 命令不仅启动任何挂起的收集作业,还标志那些已经完成的新作业,并刷新源统计信息。 这意味着你需要在能够在正在获取的源上创建新作业之前运行这里命令。 ( 在生产站点上,通常会有一个定时运行命令的cron作业,见下一节。

    有时你可以以发现作业在"状态状态"中运行错误,但 harvester run 命令不会标记为完成,因这里无法运行它的他作业。 这是由于在开发过程中特定的收集器没有正确处理错误。 在这种情况下,确保收集&获取消费者正在运行,没有更多的消费,然后使用获取源的NAME 或者id运行中止命令:

    (pyenv) $ paster --plugin=ckanext-harvest harvester job_abort {source-id/name} --config=/etc/ckan/default/production.ini

    在生产服务器上设置收集器

    以前的方法在开发或者调试过程中工作良好,但不建议在生产服务器中使用。 有几种可以能的方法来设置收集器,这取决于你的特定基础设施和需求。 最后一点是,应该保持运行和获取过程,然后运行命令来启动任何挂起的任务。

    以下方法通常用于CKAN部署,它可能适合大多数用户。 工具使用了一个监控程序,一个监视进程的工具,以及一个运行获取作业的cron作业,假设你已经安装并配置了获取扩展插件。

    注意:建议从非根用户( 通常你正在运行CKAN的那个) 运行收集过程。 用你正在使用的步骤替换用户 ckan 。

    安装主管:

    sudo apt-get update
    sudo apt-get install supervisor

    你可以检查它是否使用这里命令运行:

    ps aux | grep supervisord

    你应该看到与这里类似的一行:

    root 9224 0.0 0.3 56420 12204? Ss 15:52 0:00/usr/bin/python/usr/bin/supervisord

    管理员需要将程序添加到它的配置中,这将描述需要监视的任务。 这里配置文件存储在 /etc/supervisor/conf.d 中。

    创建一个名为 /etc/supervisor/conf.d/ckan_harvesting.conf 然后复制以下内容:

    ; ===============================
    ; ckan harvester
    ; ===============================
    [program:ckan_gather_consumer]
    command=/usr/lib/ckan/default/bin/paster --plugin=ckanext-harvest harvester gather_consumer --config=/etc/ckan/default/production.ini
    ; user that owns virtual environment.
    user=ckan
    numprocs=1
    stdout_logfile=/var/log/ckan/std/gather_consumer.log
    stderr_logfile=/var/log/ckan/std/gather_consumer.log
    autostart=true
    autorestart=true
    startsecs=10
    [program:ckan_fetch_consumer]
    command=/usr/lib/ckan/default/bin/paster --plugin=ckanext-harvest harvester fetch_consumer --config=/etc/ckan/default/production.ini
    ; user that owns virtual environment.
    user=ckan
    numprocs=1
    stdout_logfile=/var/log/ckan/std/fetch_consumer.log
    stderr_logfile=/var/log/ckan/std/fetch_consumer.log
    autostart=true
    autorestart=true
    startsecs=10

    你需要用特定的安装设置( 示例 above 展示了通过Debian软件包安装的ckan实例的路径) 来替换许多东西:

    • 命令:位于 python 虚拟环境的paster命令的绝对路径和配置ini文件的绝对路径。
    • 用户:你使用CKAN运行的unix用户
    • stdout_logfile和 stderr_logfile: 所有来自收割消费者的输出都将被写入这个文件。 确保设置了必要的权限。

    其余的配置选项是非常自解释的。 有关这些选项和其他选项的详细信息,请参阅主管文档

    使用以下命令启动监督任务:

    sudo supervisorctl reread
    sudo supervisorctl add ckan_gather_consumer
    sudo supervisorctl add ckan_fetch_consumer
    sudo supervisorctl start ckan_gather_consumer
    sudo supervisorctl start ckan_fetch_consumer

    若要检查进程是否正在运行,可以运行以下命令:

    sudo supervisorctl status
    ckan_fetch_consumer RUNNING pid 6983, uptime 0:22:06
    ckan_gather_consumer RUNNING pid 6968, uptime 0:22:45

    启动进程时可能遇到的一些问题:

    • ckan_gather_consumer: 错误( 没有这样的进程)

      检查你的主管配置文件并停止并重新启动主管守护进程:

      sudo service supervisor start; sudo service supervisor stop
    • ckan_gather_consumer: 错误( 异常终止)

      某些东西使命令无法正常运行。 查看你在stdout_logfile部分中定义的日志文件以查看发生了什么。 常见错误包括:

      `socket.error: [Errno 111] Connection refused`
      RabbitMQ is not running::
       sudo service rabbitmq-server start

    一旦我们让两个消费者运行和监控,我们只需要创建一个运行运行收集器命令的cron作业。 为此,请使用以下命令( 它可能会要求你选择一个编辑) 编辑 cron table:

    sudo crontab -e -u ckan

    注意,我们运行这个命令是为了同我们配置要使用( 我们的示例中的ckan ) 运行的进程一样。

    将这一行粘贴到crontab中,再次替换到paster和ini文件的路径:

    # m h dom mon dow command
    */15 * * * */usr/lib/ckan/default/bin/paster --plugin=ckanext-harvest harvester run --config=/etc/ckan/default/production.ini

    这个特殊的例子每十五分钟检查一次挂起的作业。 你当然可以修改这个周期,这个 Wikipedia页面对crontab语法有很好的概述。

    为了设置清理日志的清理机制,需要调度一个更多的cron作业:

    sudo crontab -e -u ckan

    将这一行粘贴到crontab中,再次替换到paster和ini文件的路径:

    # m h dom mon dow command
     0 5 * * */usr/lib/ckan/default/bin/paster --plugin=ckanext-harvest harvester clean_harvest_log --config=/etc/ckan/default/production.ini

    这个特定的例子将在 05天内执行每天的清理。 你可以根据你的需要调整价值。

    测试

    你可以像这样运行测试:

    cd ckanext获取 nosetests --reset-db --ckan --with-pylons=test-core 。ini ckanext/harvest/tests

    以下是一些常见的错误和解决方案:

    • (OperationalError) no such table: harvest_object_error u'delete from"harvest_object_error" 数据库进入了错误的状态。 再次运行测试,但使用 --reset-db 参数。
    • (ProgrammingError) relation"harvest_object_extra" does not exist 数据库进入了错误的状态。 再次运行测试,但不需要重新运行测试。
    • (OperationalError) near"SET": syntax error 你正在测试SQLite作为数据库,但是 CKAN Harvester需要 PostgreSQL 。 指定 test-core.ini 而不是 test.ini.

    插件发布

    要创建新版本,请按以下步骤操作:

    • 根据语义版本控制规则确定新版本号。
    • 更新变更日志,特别是"未发布"部分的链接
    • 更新 setup.py 中的版本号
    • 在GitHub上创建一个新版本,并将这个版本的变更日志添加为发行说明

    社区

    为了对ckanext收获或者文档的贡献,遵循在中描述的准则。

    许可证

    这里扩展是开放和许可的GNU Affero通用 public 许可证( AGPL ) v3.0. 全文可以在以下位置找到:

    http://www.fsf.org/licensing/licenses/agpl-3.0.html



    文章标签:ext  HAR  harvest  CKAN  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语