在Windows 7上使用Compass轮询时出错

时间:2011-06-29 02:01:35

标签: ruby windows-7 cygwin compass-sass

我正在尝试在我的伙伴和我使用的Git存储库中克隆的PHP应用程序本地工作。

他使用Mac,直到现在我一直在虚拟Ubuntu Linux环境中处理应用程序。这两种环境都能够使用具有相同文件结构和文件的Compass轮询。

在Windows 7上,我从Cygwin运行Compass命令,这是我用来从应用程序的根目录(C:/ wamp / www / application)进行Compass轮询的命令:

compass watch --trace src/Application/ApplicationBundle/Resources/compass/

当我对.scss文件进行更改时,收到以下错误:

ArgumentError on line 716 of /usr/lib/ruby/1.8/pathname.rb: different prefix: "/ /cygdrivecwampwwwlimelightsrclimelightlimelightbundleresourcescompasssrcpartials _object.scss" and "/cygdrive/c/wamp/www/limelight/src/limelight/limelightbundle/ resources/compass/src" /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/path.rb:81:in 'split_path' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/path.rb:69:in 'run_callback' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/path.rb:55:in 'callback_action' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/path.rb:35:in 'update' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/state/directory.rb:39:in 'modified' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/state/directory.rb:37:in 'each' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/state/directory.rb:37:in 'modified' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/state/directory.rb:18:in 'refresh' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/backends/polling.rb:17:in 'run' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/backends/polling.rb:17:in 'each' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/backends/polling.rb:17:in 'run' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/backends/polling.rb:15:in 'loop' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/backends/polling.rb:15:in 'run' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/monitor.rb:26:in 'run' /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm.rb:20:in 'monitor' /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/lib/compass/commands/watch_project.rb:86:in 'perform' /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/lib/compass/commands/base.rb:18:in 'execute' /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/lib/compass/commands/project_base.rb:19:in 'execute' /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/lib/compass/exec/sub_command_ui.rb:43:in 'perform!' /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/lib/compass/exec/sub_command_ui.rb:15:in 'run!' /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/bin/compass:25 /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/bin/compass:39:in 'call' /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/bin/compass:39 /usr/bin/compass:19:in 'load' /usr/bin/compass:19

我通过搜索找到的所有内容都可能与Windows资本化其驱动器名称有关,尽管返回路径中缺少斜线使我认为问题可能在其他地方。 / p>

有谁知道为什么我在Windows中会收到此错误,而不是其他平台?

注意:我发现work-around涉及通过Windows'命令提示符而不是Cygwin安装ruby(和指南针),这应该可以正常工作。不过,如果有人有想法,我仍然对这个问题可能是多么好奇。

5 个答案:

答案 0 :(得分:26)

根据this commit,这是由称为FSSM的罗盘依赖引起的问题。它用于监视罗盘中的文件更改。 this comment中描述了一种解决方法。

似乎FSSM检测到ruby在Windows框中运行,并以Windows的方式(C:\blabla)处理路径。注释掉文件<fssm_gem_path>/lib/fssm/pathname.rb的第26行会使compass watch按预期工作。您也可以添加

unless path[0, 1] == File::SEPARATOR

到第26行的末尾以使其有效。

答案 1 :(得分:12)

我想我只是提供一些信息来帮助人们找到pathname.rb文件。

在cygwin提示符下输入:

gem env

这(不出所料)会提供有关Ruby Gems安装的大量信息。查找指定INSTALLATION DIRECTORY的行。我的是:

/usr/lib/ruby/gems/1.8

现在在Windows资源管理器中导航到此位置,但将“usr”替换为您的cygwin安装目录。因此,上述路径变为:

C:\cygwin\lib\ruby\gems\1.8

一旦进入此位置,直到遇到fssm gem目录。

在这个[fssm]目录中进入:

/lib/fssm/

...在那里你应该找到pathname.rb文件。

如上所述进行编辑,一切顺利。我希望这会有所帮助。

答案 2 :(得分:0)

答案 3 :(得分:0)

我遇到了同样的错误,设置略有不同。我的项目文件夹位于网络驱动器上(本地安装了ruby和sass / compass),每次我对.scss文件进行更改时,罗盘表会因OP的类似错误而崩溃。我通过映射我的网络驱动器而不是直接通过网络访问它来解决了这个问题(右键单击“我的电脑”并选择地图网络驱动器,这样我就可以在A :)访问我的远程驱动器了。

现在,我没有做'罗盘手表// SERVERNAME / My_Project'(我正在使用Git Bash),而是“指南针观看/ My_Project”,罗盘停止崩溃。

希望能帮助别人。

答案 4 :(得分:0)

使用Cygwin重新安装指南针开发版(例如0.13+)。适用于我的Compass 0.13.alpha.4(Markab) 为此:

gem uninstall compass
gem install compass --pre --no-rdoc --no-ri