我正试图在本地开发一个PHP应用程序,该应用程序是我和我的合作伙伴从Git存储库中克隆的。
他使用Mac,直到现在我一直在虚拟的Ubuntu Linux环境中开发这个应用程序。这两种环境都能够使用具有相同文件结构和文件的Compass轮询。
在Windows7上,我从Cygwin运行Compass命令,这是我用来从应用程序的根目录(C:\wamp/www/application)进行Compass轮询的命令:
compass watch --trace src/Application/ApplicationBundle/Resources/compass/
当我对.scs文件进行更改时,我收到以下错误:
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将其驱动器名称大写有关,尽管返回路径中没有斜杠让我认为问题可能出在其他地方。
有人知道为什么我可能在Windows中收到这个错误,但在其他平台上却没有吗?
注意:我发现了一个解决方案,涉及通过Windows的命令提示符而不是Cygwin安装ruby(和compass),目前应该可以正常工作。尽管如此,如果有人有想法,我仍然很好奇问题可能是什么。
根据此提交,这是一个由称为FSSM的指南针依赖引起的问题。它用于监视指南针中的文件更改。此注释中介绍了一种解决方法。
FSSM似乎检测到ruby在Windows框中运行,并以Windows的方式(C:blabla)
处理路径。注释掉文件<fssm_gem_path>/lib/fssm/pathname.rb
的第26行使compass watch
按预期工作。您也可以添加
unless path[0, 1] == File::SEPARATOR
到达线路26的末端,使其工作。
我想我应该提供更多的信息来帮助人们找到pathname.rb文件。
关于cygwin提示类型:
gem env
这(不足为奇)带来了大量关于Ruby Gems安装的信息。查找指定安装目录的行。我的是:
/usr/lib/ruby/gems/1.8
现在,在Windows资源管理器中导航到此位置,但将cygwin安装目录替换为"usr"。因此,上述路径变为:
C:cygwinlibrubygems1.8
一旦进入这个位置,就向下钻取,直到找到fssm gem目录。
在这个[fssm]目录中进入:
/lib/fssm/
在那里您应该可以找到pathname.rb文件。
如上所述进行编辑,一切顺利。我希望这能有所帮助。
请参阅此处以获得可能的修复:
- http://rails.webintellix.com/2010/05/27/error-in-ruby-relative_path_from-call-on-windows/
我遇到了同样的错误,但设置略有不同。我的项目文件夹在一个网络驱动器上(本地安装了ruby和sass/compass),每次我更改.scs文件时,指南针手表都会崩溃,并出现与OP类似的错误。我通过映射我的网络驱动器而不是直接通过网络访问它来解决这个问题(右键单击"我的电脑"并选择映射网络驱动器,这样我就可以访问位于a:的远程驱动器)。
现在,我不做"指南针观察//SERVERNAME/My_Projection"(我使用的是Git Bash),而是做"指南针观看a/My_Project",指南针停止崩溃。
希望这能帮助其他人。
使用Cygwin,重新安装compass dev版本(如0.13+)。适用于compass 0.13 alpha 4(Markab)为此:
gem uninstall compass
gem install compass --pre --no-rdoc --no-ri