Ruby on rails Rails资源:预编译:所有都适用于根用户,但不适用于普通用户

Ruby on rails Rails资源:预编译:所有都适用于根用户,但不适用于普通用户,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有一个用竹子建造的RoR项目,但已经一年多没有建造了。 所有与该项目相关的开发人员都已经离开了,公司只剩下很少的rails知识 我一直在尝试进行一个小的更改,但构建在资产编译阶段失败: /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:preco

我有一个用竹子建造的RoR项目,但已经一年多没有建造了。 所有与该项目相关的开发人员都已经离开了,公司只剩下很少的rails知识

我一直在尝试进行一个小的更改,但构建在资产编译阶段失败:

/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用户的身份运行它,它将成功;如果我以bambol用户的身份运行它,它将失败,如上所述

我进一步挖掘,在这里和那里添加了一些“put”,并找到了nil对象达到这一点的原因

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

env      = Rails.application.assets
env最终被传递给上面失败的代码

当以root用户身份运行时,env有一个Sprockets::Index类类型,但当以普通用户身份运行时,它是nil

我比较了两个用户的环境变量,比如路径,我找不到任何可以归因于此的差异,但是我对rails的经验很少,所以我可能遗漏了一些东西


有人能给我指出正确的方向吗?甚至能给我一些提示,告诉我如何更好地调试这个问题吗?

我终于解决了这个问题

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

RoR构建/资产编译阶段似乎使用了生成计算机上不存在的生产日志位置,而且用户也没有写访问权限


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

这是托管在Heroku上的吗?不是,它托管在我们自己的服务器上。我认为这个框是CENTOS EL5或6,不确定。您可能需要考虑建立一个本地DEV环境来进行实验。从生产服务器上尝试这样做可能很困难。尝试RAILS_ENV=production bundle exec rake assets:precompile在google上搜索生产中的编译资产。我不是在prod中这样做的,这会让你丢掉工作!,而是一台竹子制造的机器。我一直在尝试运行本地环境,但遇到了一些不相关的问题: