0

I'm pretty sure I've tracked the issue down to Node.js not seeing Sass, but I have no clue why...

If I push from my laptop using: git push lamp somebranch:master, the server remotely checks it out fine, runs npm install without error, and starts processing the gruntfile, but then aborts with "remote: Warning: spawn ENOENT Use --force to continue."

However, (after I push from my laptop like above) I can ssh in, cd into my hooks directory and run ./post-receive and it finishes "Done, without errors." I also tried running grunt in the website's root and it also completed without error.

Any ideas as to what might be going on? I'm completely stumped. Should I set paths to the sass gem in the hook? I scrapped down my gruntfile to use the same target locally as well as on the server to rule out the gruntfile. It compiles fine locally, compiles fine on the server, but fails only when using git push lamp somebranch:master.

4

1 回答 1

0

有些人可能想知道为什么我没有在本地编译并将 css 从开发框转储到 Web 根目录中……也许我应该这样做。不过,这一次,我真的很想从头到尾进行 Push-to-deploy、编译和所有操作。对于任何尝试相同事情并遇到相同问题的人来说,这应该会有所帮助。

首先,清理通过发行版的包管理器安装的任何版本的 ruby​​ 和 sass 的系统可能不会有什么坏处。然后我擦掉了之前修补的任何残余,rvm implode并从 .bashrc 等中删除了痕迹。接下来我运行\curl -sSL https://get.rvm.io | bash -s stable --ruby --auto-dotfiles并按下 ctrl-c 以首先修复任何错误。一旦安装脚本满意,我就让它正常下载和安装。我不必使用rvm install n.n.n,rvm use n.n.nrvm use n.n.n --default2.2.1 就像我想要的那样被拉入并且看起来很好。在 rvm 设置好 ruby​​ 之后,我运行了gem install sass

现在,最终……使用 PermitUserEnvironment,就像这里提到的:如何使用 sshd-config permituserenvironment 选项是要走的路。我看到这种方法存在安全问题,但这是唯一有效的方法,我不会尝试运行有限的 shell。SSH 在不使用登录 shell 时不允许使用环境变量是正常行为。但是,我假设 git 挂钩可以完全访问用户的正常变量(使用 ruby​​ 路径等),并且该假设是不正确的。添加PermitUserEnvironment yes到服务器/etc/ssh/sshd_config等并重新启动 ssh 守护程序。作为服务器上的用户,我运行env并将其复制到.ssh/environment并清理了不需要的内容。在那之后,我做了我的git push从开发盒中,它找到并运行了 sass 编译器就好了。

于 2015-05-04T03:48:01.360 回答