【问题标题】:How do I gain access to environment variables in a subsite that is in a separate package?如何访问位于单独包中的子站点中的环境变量?
【发布时间】:2015-04-02 04:02:59
【问题描述】:

我的 Yesod 子站点需要写一些相对于应用程序根目录的文件。

Looking at this,看起来一个脚手架 Yesod 站点已经完成了大部分管道工作,但是我如何在不知道 App 记录的子站点中访问它?

approot 本身是在脚手架 Yesod 项目中使用对 appSettings 的引用定义的,这 也是App 的一个元素:

approot = ApprootMaster $ appRoot . appSettings

是否有一个函数可以为我提供应用程序根目录(或者至少是根目录的有效文件路径),而无需了解实现细节?当然,能够重用现有的 Yesod 功能是最好的。

【问题讨论】:

    标签: haskell yesod


    【解决方案1】:

    在不知道主站点本身类型的情况下,您无法访问主站点的字段,这通常违背了拥有子站点的目的。您的典型选择是:

    1. 将您要查找的数据作为子站点的显式参数
    2. 需要一个额外的类型类约束,主站点必须是其实例,从主站点获取数据

    yesod-static 是前一种方法的一个很好的例子; yesod-auth 是后者的一个例子。

    【讨论】:

    • 我似乎无法找到在 yesod-static 或 yesod-auth 中定义或使用它的位置。这是我想要做的事情的要点:saveToYesodRoot :: (YesodDataSource a) => FilePath -> IO () saveToYesodRoot file = do let root = (getAppRoot :: Approot a) return () 简而言之:我想获取应用程序的根目录,将 FilePath 附加到它,然后向它写入一个文件。 Approot 是一种数据类型,我也不确定如何将其转换为实际的文件路径。
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2012-05-31
    • 2022-11-20
    • 2016-09-18
    • 2023-03-14
    相关资源
    最近更新 更多