2012-09-10 28 views
4

我正在合作應用程序,偶爾會遇到麻煩,原因是原始開發人員在Linux中工作,而我在OSX中。我目前的問題與使用ImageMagik和回形針上傳圖像有關。當我嘗試將照片上傳到應用程序時,我收到以下消息。如何配置回形針以保存到不同目錄(取決於環境)

Permission denied - /assets 

我敢肯定,這意味着應用程序要保存在某個地方的圖像資源目錄中,但不能因爲它沒有在我的機器上存在。

在模型中,這是解決圖片的代碼。

has_attached_file :avatar, 
    :url => "/avatars/:id?style=:style", 
    :styles => { :large => "190x190#", :medium => "70x70#", :thumb => "106x106#" }, 
    :path => "/assets/rob/images/Users/:id/:style/:basename.:extension" 

現在,我假設這個目錄存在於原始程序員的計算機上以及該網站的託管位置。但是我沒有這個目錄,所以我這樣做:

:path => "~/robotimus/dev_images/:id/:style/:basename.:extension" 

但現在我處於困境,因爲我最終不得不恢復該行我在部署之前。作爲解決方案,我可以編寫一個像這樣的方法。

def images_path 
    Rails.env.production? ? "/assets/rob/images/Users/" : "~/robotimus/dev_images" 
end 

然後是:路徑線應該是這樣的:

:path => images_path + "/:id/:style/:basename.:extension" 

這聽起來像一個好主意?另外,這個方法應該存儲在哪裏?我的猜測是它屬於config/environment.rb,但我想獲得專家的意見。

回答

10

我之前爲項目做過類似的事情,在開發中我在本地存儲圖像,但在生產環境中,它們存儲在Amazon S3上。

我做的是我創建了一個config/paperclip.yml

# config/paperclip.yml 
common: &common 
    :styles: 
    :thumb: "50x50#" 
    :small: "80x80#" 
    :medium: "200x150#" 
    :normal: "320x240#" 
    :large: "800x600#" 
    :default_url: "/images/default_image.png" 


development: 
    <<: *common 

production: 
    <<: *common 
    :storage: :s3 
    :bucket: "your-bucket-name" 
    :path: "/:some/:path/:id" 
    :url: "s3_domain_url 

test: 
    <<: *common 

然後我加載的文件到我的應用程序配置:

# config/initializers/config.rb 
require 'ostruct' 

def load_config_yaml(config_file) 
    YAML.load(File.read(Rails.root.join('config', config_file)))[Rails.env] 
end 

AppConfig = OpenStruct.new(load_config_yaml('application.yml')) 

AppConfig.paperclip = load_config_yaml('paperclip.yml') 

然後,我只是AppConfig.paperclip提供的has_attached_file電話。

# app/models/image.rb 
class Image < ActiveRecord::Base 
    has_attached_file :photo, AppConfig.paperclip 
end 

所以,如果你想存儲文件在不同的路徑(但仍然是本地),只是不要使用s3的東西。

你當然可以跳過大部分配置的東西,只要在某個配置的某個配置中設置圖像路徑,如果你不想全面介入這個想法,但我喜歡配置單獨。

+0

我喜歡這種方法。謝謝! –

相關問題