2013-02-01 105 views
1

我有兩個項目。一個是面向公衆的一面,另一個面向管理員。我在兩頁上都有一個相同的頁面。指南針:從另一個項目目錄導入文件

我的目錄結構如下所示:

/public 
    config.rb 
    /images 
    /upgrade 
     /sprites 
    /sass 
    /upgrade 
     index.scss 
    /stylesheets 

/cms 
    config.rb 
    /sass 
    /upgrade 
     index.scss 
    /stylesheets 

public/sass/upgrade/index.scss是所有的風格生活。 cms/sass/upgrade/index.scss進口這些樣式,像這樣:

@import '../../../public/sass/upgrade' 

精細這些作品中,我可以生成CSS爲cms/stylesheets/upgrade/index.css。我遇到了一個問題,那就是一代精靈。裏面的public/sass/upgrade/index.scss,對於精靈的PNG進口看起來像這樣

@import 'upgrade/sprites/*.png'; 

使用LiveReload,我得到了如下錯誤:

Cannot determine the opposite position of: to 
Cannot determine the opposite position of: to 
Cannot determine the opposite position of: to 
No files were found in the load path matching "setup/packages/*.png". Your current load paths are: ./images 

這是有道理的,因爲當我編譯我的cms/sass/upgrade/index.scss,其尋找圖片在cms/images/upgrade/sprites哪裏沒有。

我很想知道是否有人遇到過這個問題,並且有任何解決方案如何在項目之間共享資產。我認爲設置relative_assets = true會幫助,但它沒有。也許我錯了。我不知道。

+0

您可以*指定images_dir指向所需的任何位置,包括項目目錄以外的位置。 – cimmanon

+0

我需要images_dir指向它們各自的項目圖像目錄。這只是我需要從兩者加載圖像的一種情況。 –

+0

是否爲圖像製作符號鏈接? – cimmanon

回答

1

我相信cimmanon建議創建一個符號鏈接應該可以工作。你確定你做得對嗎?爲了安全起見,請使用絕對路徑。

您的項目結構有點不好意思,我沒有完全理解它,所以我不能給你確切的符號鏈接位置和目標。如果你希望我們給你提供確切的路徑,請更新您的問題:

  1. 您放置符號鏈接,在那裏它,你有什麼錯誤,當您試圖編譯點;
  2. 更詳細的項目結構(所涉及文件的全部內容將有所幫助)。

UPD:確保你的Apache配置啓用FollowSymLinks和PHP配置已在include_path所有的項目目錄。

如果你放棄它,你可以使用我剛纔發明的討厭的黑客攻擊。 :D

這個想法是創建一個自定義的SASS函數,根據調用的項目返回不同的結果。這將允許從public/sass/upgrade/index.scss導入不同的路徑,具體取決於您正在編譯的項目。

public/config.rb,添加:

# Assign a name to the project and pass it into SASS 
$project_name = "public" 
module Sass::Script::Functions 
    def project_name 
    Sass::Script::String.new($project_name) 
    end 
end 

的除了cms/config.rb頗爲相似。唯一的區別是$ PROJECT_NAME的值:

# Assign a name to the project and pass it into SASS 
$project_name = "cms" 
module Sass::Script::Functions 
    def project_name 
    Sass::Script::String.new($project_name) 
    end 
end 

之後,修改導入線public/sass/upgrade/index.scss

@if project-name() == public { 
    @import 'upgrade/sprites/*.png'; 
} @else if project-name() == cms { 
    @import '../../../public/upgrade/sprites/*.png'; 
} 

在我的例子進口路徑是歪的,請調整到您的環境相匹配。

UPD2:@import指令不允許在控制指令內,如@if。因此,您可以使用:

@if project-name() == public { 
    $path: 'upgrade/sprites/*.png'; 
} @else if project-name() == cms { 
    $path: '../../../public/upgrade/sprites/*.png'; 
} 
@import #{$path}; 
相關問題