跳转到主要内容

在虚拟环境中运行Plone的heroku工具

项目描述

Heroku上的Plone

**警告** 目前Plone包含语法错误(皮肤不是有效的Python,我们为什么要调用.py!!),而Heroku真的不喜欢这样。由于这个原因,目前您在第一次成功的Plone部署后无法再次部署。我已经报告了这个问题。

您将需要

  • 已安装并运行本地的heroku工具

  • 一个经过验证的heroku账户

  • 愿意每月花费15美元以获得20GB的Postgres(Plone不适合5MB)。

开始一个项目

我们需要能够在虚拟环境中安装Plone,而不需要任何buildout的环境构建功能。除此之外,运行环境是临时的,因此我们无法在初始推送后手动构建它。

在您的requirements.txt中

isotoma.depends.zope2_13_8
isotoma.depends.plone4_1
isotoma.plone.heroku

前两个egg是虚拟包,会在您的虚拟环境中安装200多个包。这些是必需的,因为我们需要固定要使用的Plone版本。

第三个egg提供了bin/plonebin/migrate。这些辅助工具将根据需要动态提供环境,并实例化站点/运行迁移。

我们将使用RelStorage来获取经济实惠的持久存储。我们必须使用1.4.2而不是1.5.x系列,以避免它引入的plpgsql要求。

在撰写本文时,似乎只有Django Python应用程序会自动获得数据库。您可以通过添加一个包含空settings.py的文件夹来获取一个。

django_bait/
    settings.py

您需要一个Procfile,以便Heroku知道如何运行zope实例

web: ./bin/plone -p $PORT

进行本地构建

构建您的虚拟环境

virtualenv .
./bin/pip install -r requirements.txt

您可以使用以下方式启动plone实例

./bin/plone

这将使您在8080端口上运行一个Plone实例。默认情况下,它不会使用任何数据存储。

添加您的产品

您可以使用ZopeSkel快速创建一个新的产品。

source bin/activate
mkdir src && cd src
pip install zopeskel
zopeskel plone my.app

然后按照提示操作。确保回答通用设置问题时选择“是”。

您可以将自己的自定义egg添加到requirements.txt中。

-e src/myapp.app

说明告诉您使用< span class="docutils literal">file:前缀。它们是假的。不要这样做。

您的ZCML应该由z3c.autoinclude找到。

然后您应该能够通过ZMI或使用下面描述的迁移脚本来安装您的产品。

部署到Heroku

确保将所有更改提交到您的Git存储库。然后

~/bin/heroku create --stack cedar
git push heroku master

等待。如果它不起作用,那可能是因为超时。部署200多个egg需要很长时间,Heroku可能认为您的部署出错并超时。

因此编辑您的需求

isotoma.depends.zope2_13_8
# isotoma.depends.plone4_1
isotoma.plone.heroku

提交并推送到Heroku。

这将构建不包含Plone的Zope,大约一半需要构建的egg。然后您可以取消注释Plone依赖项egg,再次推送以完成。

现在您应该有一个正常工作的Plone站点了!

重新根目录您的门户

默认情况下,您的实际站点不会在< span class="docutils literal">/,它会在< span class="docutils literal">/Plone。我们可以通过一些老式的Zope魔法来解决这个问题 - 注意,< span class="docutils literal">migrate命令可以自动为您设置。

  • 在ZMI中,在< span class="docutils literal">/Plone创建一个SiteRoot对象。默认设置就很好。

  • 在ZMI中,在< span class="docutils literal">/创建一个包含以下内容的DTMLMethod:

    <dtml-let stack="REQUEST['TraversalRequestNameStack']">
      <dtml-if "stack and stack[-1]=='zmi'">
        <dtml-call "stack.pop()">
        <dtml-call "REQUEST.setVirtualRoot('zmi')">
      <dtml-else>
        <dtml-call "stack.append('Plone')">
      </dtml-if>
    </dtml-let>
  • 在ZMI中,在< span class="docutils literal">/创建一个指向我们刚刚创建的DTMLMethod的AccessRule。

现在任何对< span class="docutils literal">/foo的请求将由< span class="docutils literal">/Plone/foo处理,任何对< span class="docutils literal">/zmi/manage的请求将由< span class="docutils literal">/manage处理。成功。

迁移工具

迁移脚本使用< span class="docutils literal">isotoma.recipe.plonetools的Plone设置功能来自动化您站点的设置。它可以应用配置文件、安装产品、设置属性甚至调用随机突变。

在项目根目录中添加一个migrate.cfg

[main]
# The id of the Plone Site that is created. Default is Plone.
site-id = Plone

# The admin user that was created by mkzopeinstance - for us it will almost
# certainly be admin. Default is admin.
admin-user = admin

# Whether or not to apply the SiteRoot/AccessRule policy described in the previous
# section. Default is False.
rootify = True

# List of products to install on the initial migrate (when ``/Plone`` is created)
products-initial =
    Products.foo

# List of products to install (or reinstall) every time migrate is run
products =
    Products.LinguagePlone

# List of GenericSetup profiles to apply the first time migrate is run (when
# ``/Plone`` is created)
profiles-initial =
    myapp.policy:initial

# List of GenericSetup profiles to apply every time ``bin/migrate`` is run
profiles =
    myapp.policy:default

这个没有意义,但它显示了您能做什么。要本地运行

./bin/migrate -c migrate.cfg

要针对您的Heroku应用程序运行

~/bin/heroku run ./bin/migrate -c migrate.cfg

默认情况下,它会查找分支根目录中的migrate.cfg,您不需要告诉它 - 您可以直接< span class="docutils literal">./bin/migrate。

维护您的应用程序

您可以使用内置的Heroku日志工具查看您的日志。

./bin/heroku logs

您可以使用debug命令将解释器指向您的数据库。

./bin/heroku run ./bin/debug

您可以使用run命令在您的git存储库中运行脚本。

./bin/heroku run ./bin/run scripts/myscript.py

isotoma.plone.heroku

0.0.0 (2011-09-29)

  • 初始版本

项目详情


< span>版本历史 发布通知 | RSS源

下载文件

下载适合您平台的自定义文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

isotoma.plone.heroku-0.0.0.tar.gz (10.4 kB 查看哈希值)

上传时间< time datetime="2011-09-30T00:33:36+0000" data-controller="localized-time" data-localized-time-relative="true" data-localized-time-show-time="false"> 2011年9月30日 < code>源

由以下支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面