在Windows 7上进行罗盘轮询时出现错误

9
我正在尝试本地处理一个PHP应用程序,该程序是从我和合作伙伴使用的Git存储库克隆而来。
他使用Mac,而我一直在虚拟Ubuntu Linux环境中处理应用程序。两个环境都能够使用相同的文件结构和文件进行Compass轮询。
在Windows 7上,我通过Cygwin运行Compass命令,并使用以下命令让Compass从应用程序的根目录(C:/wamp/www/application)轮询:
compass watch --trace src/Application/ApplicationBundle/Resources/compass/
然后,当我对.scss文件进行更改时,我会收到以下错误:
在 /usr/lib/ruby/1.8/pathname.rb 的第716行发生了 ArgumentError 错误: 不同的前缀:/cygdrivecwampwwwlimelightsrclimelightlimelightbundleresourcescompasssrcpartials_object.scss 和 /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行执行了 split_path 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/path.rb 的第69行执行了 run_callback 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/path.rb 的第55行执行了 callback_action 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/path.rb 的第35行执行了 update 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/state/directory.rb 的第39行执行了 modified 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/state/directory.rb 的第37行执行了 each 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/state/directory.rb 的第37行执行了 modified 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/state/directory.rb 的第18行执行了 refresh 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/backends/polling.rb 的第17行执行了 run 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/backends/polling.rb 的第17行执行了 each 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/backends/polling.rb 的第17行执行了 run 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/backends/polling.rb 的第15行执行了 loop 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/backends/polling.rb 的第15行执行了 run 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm/monitor.rb 的第26行执行了 run 方法,在 /usr/lib/ruby/gems/1.8/gems/fssm-0.2.7/lib/fssm.rb 的第20行执行了 monitor 方法,在 /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/lib/compass/commands/watch_project.rb 的第86行执行了 perform 方法,在 /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/lib/compass/commands/base.rb 的第18行执行了 execute 方法,在 /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/lib/compass/commands/project_base.rb 的第19行执行了 execute 方法,在 /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/lib/compass/exec/sub_command_ui.rb 的第43行执行了 perform! 方法,在 /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/lib/compass/exec/sub_command_ui.rb 的第15行执行了 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行调用了 call 方法,在 /usr/lib/ruby/gems/1.8/gems/compass-0.11.1/bin/compass 的第39行发生了错误,在 /usr/bin/compass 的第19行加载了文件,在 /usr/bin/compass 的第19行发生了错误。
我通过搜索只发现这可能与Windows将驱动器名称大写有关,尽管返回路径中缺少斜杠,这使我认为问题可能出在其他地方。 有人知道为什么在Windows上会收到此错误,但在其他平台上却没有?
注意:我找到了一个解决方法,涉及通过Windows命令提示符而不是Cygwin安装ruby(和compass),现在应该可以正常工作。 不过,如果有人有想法,我仍然很好奇问题可能是什么。

我在2015年10月也遇到了同样的问题,但是这里发布的解决方案已经几年过去了,我无法使其正常工作。你编辑中的“解决方法”现在已经失效了。我正在使用Ruby版本1.9.3。在我的pathname.rb文件中,“第26行”的代码与给出的代码不同。如果有人有最新的解决方案,请告知... - Inigo
5个回答

26
根据这一提交记录,compass依赖项FSSM导致了这个问题。它用于监视compass中的文件更改。在该评论中描述了一种解决方法。
似乎FSSM会检测ruby是否在Windows系统上运行,并按照Windows的方式处理路径(C:\blabla)。将<fssm_gem_path>/lib/fssm/pathname.rb文件的第26行注释掉可以使compass watch按预期工作。你也可以添加
unless path[0, 1] == File::SEPARATOR

将代码修改到第26行末尾才能使其正常工作。


12

我想提供更多信息来帮助人们找到pathname.rb文件。

在cygwin提示符下输入:

gem env

这会显示有关您的 Ruby Gems 安装的大量信息。查找指定安装目录的行。我的是:

/usr/lib/ruby/gems/1.8

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

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

在这个位置,一直往下找,直到找到fssm gem目录。

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

/lib/fssm/

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

按照以上方法进行编辑,一切就都好了。希望这能帮到你。


0

不幸的是,那个方法并没有奏效,我仍然收到完全相同的消息。谢谢你!我已经找到了一个解决方法,通过Windows命令提示符而不是Cygwin安装ruby(和compass),现在应该可以正常工作了。不过,如果有人有想法,我仍然很好奇问题可能是什么。 - Matt McCormick

0

我在使用稍微不同的设置时遇到了相同的错误。我的项目文件夹位于网络驱动器上(ruby和sass/compass本地安装),每次我更改.scss文件时,compass watch都会崩溃,并出现与OP类似的错误。我通过映射网络驱动器而不是直接通过网络访问来解决了这个问题(右键单击我的电脑并选择映射网络驱动器,以便我可以在A:上访问远程驱动器)。

现在,我不再使用'compass watch //SERVERNAME/My_Project'(我正在使用Git Bash),而是使用'compass watch a/My_Project',compass就不会再崩溃了。

希望这能帮助其他人。


0
使用Cygwin重新安装Compass开发版本(例如0.13+)。我使用的是Compass 0.13.alpha.4(Markab),这个方法对我有效。 操作步骤如下:
gem uninstall compass
gem install compass --pre --no-rdoc --no-ri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接