Rails资产:预编译:全部适用于root用户但不适用于普通用户

时间:2014-04-28 23:27:17

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个通过Bamboo建造的RoR项目,但是已经建成了一年多。 所有与项目相关的开发人员都已经开始了,公司也没有多少铁路知识。

我一直试图做一个小改动,但是在资产编译阶段构建失败了:

/usr/bin/env  ruby -S rake assets:precompile
/var/bamboo/.rbenv/versions/jruby-1.6.7/bin/jruby /var/bamboo/.rbenv/versions/jruby-1.6.7/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
rake aborted!
undefined method `each_logical_path' for nil:NilClass

在尝试调试时,我已经使用构建代理并手动运行命令。

如果我以root用户身份运行它,它会成功,如果我以竹子用户身份运行它,它会失败,如上所述。

我进一步挖掘,添加了一些' puts'在这里和那里,找到了一个零对象到达那一点的原因。

有一个assets.rake文件,其中包含以下内容:

env      = Rails.application.assets

env 最终会传递给上面的失败代码。

以root身份运行时, env 的类类型为 Sprockets :: Index ,但以普通用户(bamboo)运行时,它为零。

我已经比较了两个用户的环境变量(例如PATH),但是我找不到任何可以归因于此的差异,但我对rails的体验很少,所以我可能错过了一些东西

有人能指出我正确的方向,甚至提供有关如何更好地调试此问题的提示吗?

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题。

最近的更改将生产日志记录位置从/tmp/app.log移至/var/log/app_logs/app.log

似乎RoR构建/资产编译阶段使用生产日志位置,该位置在构建机器上不存在,并且竹子用户也没有写入权限。

最后,我在竹子计划中增加了一个步骤来创建目录&文件并在日志上设置r / w权限。