2010-03-19 39 views
0

这个问题出现了,因为单元格gem使用File.join('app','cells')指定模板目录。在你运行Rails作为守护进程(scripts/server -d)之前,这很好。守护进程将目录切换到/,导致单元格模板路径指向错误的绝对路径。在Rails插件中指定'app'路径的正确方法是什么?

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

所以我的问题是什么是适当的方式来指定在Rails插件的'应用程序'下的目录路径?或者是否有其他错误会导致守护进程Rails无法找到相对路径?

回答

1

我建议将您的更改移出插件并进入初始化程序。在初始化器中重写使用File.join('app','cells')的方法。这有几个好处。

  1. 您不直接修改第三方代码,因此您更有可能不必担心在升级时重新应用更改。
  2. 通过不修改插件本身插件单元测试仍然会通过。
  3. 您可以使用RAILS_ROOT,我认为这是正确的解决方案。
+0

原来这是正确的方法来处理它。似乎没有处理Rails可选的宝石的相对路径的标准方式。在这种情况下,它更像是一个文档问题。该gem应该不提供默认值,所以每个人都必须配置它,并且不会遇到守护进程与非守护进程的问题。 – 2010-03-19 19:53:23

0

对于那些谁遇到了麻烦破译这个答案,这里是我工作:

创建一个文件配置/初始化/ cells.rb

地说:

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

希望这可以帮助

相关问题