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

时间:2010-03-19 02:42:52

标签: ruby-on-rails actionview rails-cells

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

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

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

2 个答案:

答案 0 :(得分:1)

我建议您将更改从插件中移出并转换为初始化程序。在初始化程序中覆盖使用File.join('app','cells')的方法。这有几个好处。

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

答案 1 :(得分:0)

对于那些在解读这个答案时遇到问题的人来说,这对我有用:

创建文件config / initializers / cells.rb

在其中:

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

希望这有帮助