代码之家  ›  专栏  ›  技术社区  ›  Brian Deterling

在Rails插件中指定“app”路径的正确方法是什么?

  •  0
  • Brian Deterling  · 技术社区  · 14 年前

    这个问题的出现是因为cells gem使用file.join(“app”,“cells”)指定模板目录。在您将Rails作为守护进程(scripts/server-d)运行之前,这是可以正常工作的。守护进程将目录切换到/以使单元模板路径指向错误的绝对路径。

    我的解决方案是将默认路径设置为file.join(rails_root,“app”,“cells”)。这在Rails中有效,但是插件的单元测试失败,因为没有定义Rails_根。使用 File.join(File.dirname(__FILE__),'..' …也可以,但需要6个级别的“..”这似乎是错误的。

    所以我的问题是,在Rails插件的“app”下指定目录路径的正确方法是什么?或者,是否有其他错误会导致守护进程无法找到相关路径?

    2 回复  |  直到 12 年前
        1
  •  1
  •   Randy Simon    14 年前

    我建议将您的更改从插件移到初始值设定项中。在初始值设定项中,重写使用file.join(“app”,“cells”)的方法。这有几个好处。

    1. 您没有直接修改第三方代码,因此您更不必担心在升级时重新应用更改。
    2. 不修改插件本身,插件单元测试仍将通过。
    3. 您可以使用Rails_根,我认为这是正确的解决方案。
        2
  •  0
  •   Matteo Alessani Cord LaBarre    13 年前

    对于那些难以理解这个答案的人来说,以下是对我有用的:

    创建文件config/initializers/cells.rb

    放入:

    Cell::Base.view_paths=[
      File.join(RAILS_ROOT, 'app', 'cells'),
      File.join(RAILS_ROOT, 'app', 'cells', 'layouts')
    ]
    

    希望这有帮助