2012-06-17 5 views
0

내 레일 앱에서 클립으로 Amazon S3 스토리지를 설정하려고합니다. 내가보기를로드 할 때레일 : AWS S3 + Paperclip : AssetsController에서 NoMethodError 받기 # create

난에 "사용자"

다음

attr_accessible :user_id, :uploaded_file 

belongs_to :user 
#set up "uploaded_file" filed as attached_file(using paperclip) 
has_attached_file :uploaded_file, 
       :path => "assets/:id/:basename.:extension", 
       :storage => :s3, 
       :s3_credentials => "#{Rails.root}/config/amazon_s3.yml", 
       :bucket => "XXXXX" 

validates_attachment_size :uploaded_file, :less_than => 1000.megabytes 
validates_attachment_presence :uploaded_file 

임은 오류가 Asset.rb의 처음 몇 줄 수 있습니다 속한다 "자산"이라는 모델을 가지고 :

NoMethodError in AssetsController#create 
undefined method `symbolize_keys' for #<String:0x00000103939258> 

이것은 무엇을 의미합니까? "Asset.rb"의이 줄과 관련이 있습니다. : s3_credentials => "# {Rails.root} /config/amazon_s3.yml",

웹에서 올려다 보았을 때 몇 가지 토론이있었습니다. Rails_ROOT가 사용되지 않으므로 대신 Rails.root를 사용했습니다. 이 오류가 계속 발생합니다.

또한 AWS 키 및 비밀 암호를 amazon_s3.yml 구성 파일에 저장합니다.

다른 모범 사례가 있다면 누구나 듣고 싶습니다. heroku는 자신의 웹 사이트에서 환경 변수로 변수를 넣으 려하지만, 내가 어떻게 heroku에 설정했는지 그리고 내 지역 개발 기계의 Im은 어떨까요? 어떻게 작동할까요?

Im 조금 혼란 스러워요. 어딘가에 완전한 예제 나 튜토리얼이 있는지 알아보고 싶습니다. 내가 설정을 사용되지 않는 찾을 수있는 모든 .....

감사

나를 위해 작동 방법
+0

을 전화처럼 보이게? –

답변

2

(상황에 채택) :

#Asset.rb 
has_attached_file :uploaded_file, { 
    :path => "assets/:id/:basename.:extension" 
}.merge(PAPERCLIP_STORAGE_OPTIONS) 

#environments/development.rb and test.rb 
PAPERCLIP_STORAGE_OPTIONS = { 
    :storage => :s3, 
    :bucket => "XXXX", 
    :s3_credentials => YAML.load_file("#{Rails.root}/config/s3_credentials.yml") 
} 

#environments/production.rb 
PAPERCLIP_STORAGE_OPTIONS = { 
    :storage => :s3, 
    :bucket => ENV['S3_BUCKET_NAME'], 
    :s3_credentials => { 
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
} 

#config/s3_credentials.yml 
access_key_id: "XXXX" 
secret_access_key: "XXXX" 

있습니다

  1. s3_credetials.yml.gitignore에 추가하십시오.
  2. 하여주십시오, 당신에게 Heroku에 ENV 변수를 추가 : https://devcenter.heroku.com/articles/s3
  3. 당신은 { }PAPERCLIP_STORAGE_OPTIONS의 값을 변경할 수 있습니다. 그런 다음 파일이 로컬로 저장됩니다 (예 : 테스트 용). How can I set paperclip's storage mechanism based on the current Rails environment?

    오프 주제,하지만 유용 할 수 있습니다 :

이 문제는 해결하는 문제에 도움이되었습니다 당신이 파일을 읽어들이는 경우 - 역 추적/장소 어디를 무엇 @asset.uploaded_file.s3_object.read

+0

안녕하세요,이 위대한 답변 주셔서 감사합니다. 나는 다음과 같은 질문을 가지고있다. "Paperclip.options [: command_path] ="/ usr/local/bin/""필자는 제안 된 행을 추가해야 할 것인가 : "PAPERCLIP_STORAGE_OPTIONS = . {...}이 줄 끝하거나 교체 감사 – banditKing

+0

이 작동하지 않았다 임이 오류 – banditKing

+0

이전 또는 이후에 추가 " 초기화되지 않은 상수 자산 :: PAPERCLIP_STORAGE_OPTIONS이 라우팅 오류"점점 :. 중요하지 않습니다 . 그냥 재검토 : 날 위해 동일하게 작동합니다. 서버를 다시 시작하려고 했습니까?config에 동일한 상수 이름을 작성했는지, 실행중인 환경이 어디에 있는지, config를 어디에 두 었는지 확인하십시오. Standart debugging process. 하지만 왜 '라우팅 오류'가 발생하는지 모르겠다. 이상하게도, 여기서는 아마도 오류입니다. –

관련 문제