2013-07-25 7 views
11

के लिए "अनुपलब्ध आवश्यक: बाल्टी विकल्प" मेरे रेल ऐप में मैं उपयोगकर्ताओं को "रिलीज" बनाते समय एक छवि अपलोड करने देता हूं, और इसे सीधे S3 पर अपलोड करना चाहिए। मुझे विकास और उत्पादन दोनों में निम्नलिखित त्रुटि मिल रही है।पेपरक्लिप/एस 3

संपादित करें: मुझे ध्यान रखना चाहिए कि यह त्रुटि तब सबमिट होती है जब रिलीज संपादन पृष्ठ से फ़ॉर्म सबमिट पर अपलोड करने का प्रयास किया जाता है।

ArgumentError in ReleasesController#update 

missing required :bucket option 
Rails.root: /Users/jasondemeuse/pressed 

मैं Carrierwave का उपयोग कर कोई मुद्दों के साथ पहले इस किया है, लेकिन समझ नहीं मैं गलत क्या कर रही हूं कि अब मैं पेपरक्लिप उपयोग कर रहा हूँ। एसओ और अन्य जगहों पर मैंने जो भी फिक्स्ड देखा है, वह हुकोकू मुद्दे हैं, लेकिन मुझे विकास पर एक ही समस्या हो रही है और किसी भी फिक्स ने मदद नहीं की है। (प्रासंगिक के टुकड़े इंगित करता है "..." नहीं)

यहाँ प्रासंगिक कोड है:

development.rb

Appname::Application.configure do 

... 

    config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_protocol => 'http', 
    :s3_credentials => { 
     :bucket => ENV['AWS_BUCKET'], 
     :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
     :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
    } 
end 

production.rb

Appname::Application.configure do 

... 

    config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_protocol => 'http', 
    :s3_credentials => { 
     :bucket => ENV['AWS_BUCKET'], 
     :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
     :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
    } 
end 

रिहाई । आरबी

class Release < ActiveRecord::Base 
    attr_accessible ... :banner 


    belongs_to :user 


    has_attached_file :banner, styles: { 
    thumb: '100x100>', 
    square: '200x200#', 
    medium: '300x300>', 
    spread: '1200x200' 
    } 

    has_many :banners, :dependent => :destroy 
    accepts_nested_attributes_for :banners, :allow_destroy => true 


end 

show.html.erb

<%= image_tag @release.banner.url(:medium) %> 
<%= @release.banner.url %> 

// Have both of these in for now to see if they work, but since the upload isn't working it's giving me the missing.png 

_form.html.erb

<%= f.label "Add A Banner?" %><br /> 
<%= f.file_field :banner %> 

Heroku config (विकास के लिए .bash_profile में एक ही है)

AWS_ACCESS_KEY_ID:   XXXXXXXXXXXXXXXX 
AWS_BUCKET:     appname 
AWS_SECRET_ACCESS_KEY:  XXXXXXXXXXXXXXXXXXXXXXXXXXX 

संपादित करें: यहाँ मेरी नियंत्रक के अपने प्रासंगिक हिस्सा है भी

def update 
    @release = Release.find(params[:id]) 


    respond_to do |format| 
     if @release.update_attributes(params[:release]) 
     format.html { redirect_to [@user,@release], notice: 'Release was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @release.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

मैं इस अत्यंत सरल होना चाहिए और मुझे यकीन है कि मैं सिर्फ कुछ स्पष्ट भूल गया हूँ, लेकिन मैं this walkthrough पर जाने दिया गया है पता साथ ही साथ जो फिक्स मैंने पाया है और कुछ भी काम नहीं करता है। क्या कोई रेक कार्य या बंडल है जिसे मैं चलाने या भूलना भूल गया?

अग्रिम धन्यवाद!

संपादित करें 2: नीचे जवाब मुझे बाहर एक बहुत मदद की, और मेरे लिए fog मणि तय सबसे चीजों का उपयोग करने जा। अगर दूसरों को ये वही समस्याएं हो रही हैं, तो मुझे भी एक और समस्या थी जो इसे मेरे लिए भ्रमित कर रही थी। यदि आपके पास Heroku समस्याएं हैं और Paperclip::PaperclipError (Item model missing required attr_accessor for 'image_file_name'): हैं, तो सुनिश्चित करें कि आप heroku rake db:migrate चलाएं और फिर 0okuके साथ उसकेोकू को पुनरारंभ करें। मैंने अपनी स्कीमा लोड की और गलत तरीके से माना कि मुझे ऐसा करने की आवश्यकता नहीं है।

उपर्युक्त can be found here के साथ एक SO उत्तर।

+0

पेपरक्लिप का कौन सा संस्करण आप उपयोग कर रहे हैं? – gregates

+0

3.4.2 - मेरे पास जेमफाइल में 'मणि "पेपरक्लिप", "~> 3.0" है। – Jason

+0

मुझे लगता है कि कोशिश करने के लिए एक चीज 'AWS_BUCKET = appname रेल सर्वर' चलाएं और देखें कि क्या आपको अभी भी त्रुटि मिलती है या नहीं। – gregates

उत्तर

19

मुझे लगता है कि ऐसा इसलिए है क्योंकि :bucket पेपरक्लिप को S3 तक नहीं दिया जाना चाहिए।
फिक्स्ड config

config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_protocol => 'http', 
    :bucket => ENV['AWS_BUCKET'], 
    :s3_credentials => { 
     :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
     :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
    } 

और Paperclip::Storage::S3 दस्तावेज़ फिर भी खराब लिखा/स्वरूपित किया जा रहा है, कि पुष्टि करने के लिए लगता है।

संपादित करें:

अपनी परियोजनाओं मैं कोहरा मणि के साथ पेपरक्लिप का उपयोग में से एक में और यह अच्छी तरह से

Paperclip::Attachment.default_options.merge!(
    :storage => :fog, 
    :fog_credentials => { 
    :provider => 'AWS', 
    :aws_access_key_id => ENV['S3_ACCESS_KEY_ID'], 
    :aws_secret_access_key => ENV['S3_SECRET_ACCESS_KEY'], 
    :region => 'eu-west-1' # in case you need it 
    }, 
    :fog_directory => ENV['S3_BUCKET'], # only one of those is needed but I don't remember which 
    :bucket => ENV['S3_BUCKET'] 
) 
+1

दुर्भाग्य से परिवर्तन नहीं हुआ, मैंने इसे s3_credentials में शामिल किया पेपरक्लिप के लिए [उसकेोकू walkthrough] के अनुसार [https://devcenter.heroku.com/articles/paperclip-s3)। मैं इसे और अधिक देखने जा रहा हूं, शायद उस यात्रा में कुछ गलत था? आपकी सहायताके लिए धन्यवाद! – Jason

+0

मेरी राय में आपको पेपरक्लिप के रीडमे के साथ रहना चाहिए, कुछ हेरोकू गाइड नहीं, जो कि कोई भी नहीं जानता कि कितना पुराना है। –

+0

इसे अप्रैल में पोस्ट/अपडेट किया गया था और थॉटबॉट में एक देव द्वारा लिखा गया था, लेकिन हाँ मैंने पेपरक्लिप रीडेमे को भी देखा। – Jason

0

काम करता है मेरे मामले में यह है कि मैं फोरमैन (Heroku) जो कि एक का उपयोग करता है का उपयोग कर रहा था। पर्यावरण चर को स्टोर करने के लिए env फ़ाइल। तो, जब मैं rake db:migrate किया यह नहीं पा सके ENV['AWS_ACCESS_KEY_ID']

मुझे अपने प्रवास को चलाने के लिए मैं अस्थायी रूप से जोड़ा गया है मेरी AWS क्रेडेंशियल Carrierwave config ब्लॉक में directlñy और उसके बाद के बाद उन्हें हटा दिया ...

यह वह जगह है किया इसलिए नहीं कि अगली बार जब आप यह एक ही बात कहेंगे विस्थापित एक स्थायी समाधान ...

स्थायी समाधान के लिए देखें: Use environment variables in Rake task

जो कहते हैं उपयोग: foreman run rake some_task इस तरह से सभी चर .env में परिभाषित के लिए लोड किए गए हैं rake कार्य भी

0

इसे मॉड्यूल और कक्षा के अंदर अपनी application.rb फ़ाइल में जोड़ें। local_env.yml फ़ाइल बनाएं और वहां अपने पर्यावरण चर डालें। यह कोड सर्वर प्रारंभ पर आपके पर्यावरण चर लोड करेगा:

config.autoload_paths += %W(#{config.root}/lib) 
config.before_configuration do 
    env_file = File.join(Rails.root, 'config', 'local_env.yml') 
    YAML.load(File.open(env_file)).each do |key, value| 
     ENV[key.to_s] = value 
    end if File.exists?(env_file) 
end 
संबंधित मुद्दे