NameError (คลิปหนีบกระดาษคงที่ที่ไม่ได้เริ่มต้น :: ที่เก็บข้อมูล :: S3 :: AWS):


91

ฉันพยายามรวมรูปภาพเข้ากับเว็บแอปของฉันและพบข้อผิดพลาดนี้อยู่เรื่อย ๆ หลังจากลบคุณสมบัติบางอย่างออกไป มันมาถึงตัวควบคุมแอปพลิเคชัน 'สร้าง' ของฉันและฉันไม่แน่ใจว่าควรไปจากที่นี่

2015-02-06T20:30:12.292187+00:00 app[web.1]:    (1.9ms)  ROLLBACK
2015-02-06T20:30:12.296299+00:00 app[web.1]: NameError (uninitialized constant Paperclip::Storage::S3::AWS):
2015-02-06T20:30:12.296301+00:00 app[web.1]:   app/controllers/articles_controller.rb:24:in `create'
2015-02-06T20:45:14.691084+00:00 app[web.1]: [paperclip] saving /articles/images/000/000/013/original/git.jpeg
2015-02-06T20:45:14.698744+00:00 app[web.1]: Completed 500 Internal Server Error in 584ms
2015-02-06T20:45:14.700871+00:00 heroku[router]: at=info method=POST path="/articles" host=preston.herokuapp.com request_id=d9d02257-3616-4686-bce5-3d912cd528c2 fwd="76.22.102.38" dyno=web.1 connect=1ms service=698ms status=500 bytes=1754

Articles_controller.rb

class ArticlesController < ApplicationController
http_basic_authenticate_with name: "name", password: "password", except: [:index, :show]

    def index
        @articles = Article.all.order("created_at DESC")
    end

    def show
        @article = Article.find(params[:id])
    end

    def new
        @article = Article.new
    end 

    def edit
        @article = Article.find(params[:id])

    end

    def create
        @article = Article.new(article_params)

        if @article.save
          redirect_to @article
        else
            render 'new'
        end  
    end

    def update
        @article = Article.find(params[:id])

        if @article.update(article_params)
            redirect_to @article
        else
            render 'edit'
        end
    end

    def destroy
        @article = Article.find(params[:id])
        @article.destroy

        redirect_to articles_path
    end

    private

    def article_params
        params.require(:article).permit(:title, :text, :image)
    end
end

Gemfile

source 'https://rubygems.org'
ruby '2.0.0'

gem 'rails', '4.2.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'bootstrap-sass', '~> 3.3.3' 
gem 'autoprefixer-rails'
gem 'paperclip', '~> 4.2.1'
gem 'aws-sdk', '~> 2.0.22'

group :development, :test do
 gem 'byebug'
 gem 'web-console', '~> 2.0'
 gem 'spring'
 gem 'sqlite3'
end

group :production do
    gem 'pg'
    gem 'rails_12factor'
end

group :doc do
    gem 'sdoc', '~> 0.4.0', require: false
end

คุณกำลังปรับใช้กับ Heroku หรือไม่?
Ahmad Al-kheat

ใช่ฉันมีอยู่แล้วและฉันกำลังดูในบันทึกของ heroku และพบข้อผิดพลาดนั้น
EggSix

3
ก็มีแนวโน้มมากที่สุดเพราะคุณไม่ได้เริ่มต้นคง AWS ใน Heroku คุณจำเป็นต้องเรียกใช้ $ Heroku การตั้งค่า: ชุด S3_BUCKET_NAME = your_bucket_name $ Heroku การตั้งค่า: ชุด AWS_ACCESS_KEY_ID = your_access_key_id $ Heroku การตั้งค่า: ชุด AWS_SECRET_ACCESS_KEY = your_secret_access_key
อาห์หมัดอัล kheat

อืมฉันทำตามขั้นตอนนั้น แต่ฉันจะเริ่มใหม่ทั้งหมดเพื่อให้แน่ใจว่าถูกต้อง
EggSix

โอเคแจ้งให้เราทราบหากได้ผลเพื่อที่ฉันจะได้เป็นคำตอบสำหรับคนอื่น ๆ ที่จะได้รับประโยชน์เช่นกัน
Ahmad Al-kheat

คำตอบ:


179

แก้ไข aws-sdk ของ Gemfile เพื่อติดตั้งเวอร์ชันก่อนหน้า 2.0:

gem 'aws-sdk', '< 2.0'

ปัญหานี้ได้รับการแนะนำให้รู้จักกับ aws-sdk (2.0+) เวอร์ชันใหม่ คุณสามารถอ่านเพิ่มเติมได้ที่นี่: http://ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2


2
ฉันพบว่าเหตุผลอยู่ในอัญมณี 'aws-sdk' ที่อัปเดตแล้ว มี aws-sdk เวอร์ชันใหม่ (2+) ที่ไม่สามารถใช้งานร่วมกับเวอร์ชันก่อนหน้าได้ คุณสามารถอ่านเพิ่มเติมได้ที่นี่:
TopaZ

ขอบคุณสิ่งที่ฉันต้องการ!
Sprachprofi

27
gem 'aws-sdk-v1'นอกจากนี้คุณสามารถแทนที่บรรทัดที่มี จากนั้นให้คุณดึงอัญมณี v2 aws-sdk สามารถใช้ร่วมกันในแอปพลิเคชันเดียวกันได้เนื่องจากเนมสเปซต่างกัน
Trevor Rowe

โซลูชันของ Trevor Rowe ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน - และความจริงที่ว่าพวกเขาสามารถใช้พร้อมกันนั้นมีประโยชน์มาก ขอบคุณ Trevor!
XtraSimplicity

18

มีวิธีแก้ปัญหาอย่างเป็นทางการใช้คลิปหนีบกระดาษจากสาขานี้: ใช้ได้กับ aws-sdk เวอร์ชันด้านบน 2

gem 'paperclip', :git=> 'https://github.com/thoughtbot/paperclip', :ref => '523bd46c768226893f23889079a7aa9c73b57d68'

เพียงเพิ่ม: พารามิเตอร์ s3_region ในการกำหนดค่าคลิปหนีบกระดาษ s3 ของคุณ

เหมาะกับฉัน


1
นี่คือคำตอบที่ดีที่สุดในขณะนี้เนื่องจาก AWs 1 เลิกใช้งานแล้ว
ardochhigh

4

ฉันทำให้มันใช้งานได้โดยไปที่โฟลเดอร์อัญมณีของฉันและเปลี่ยนอัญมณีเป็น:

  • อัญมณี 'คลิปหนีบกระดาษ'
  • อัญมณี 'aws-sdk'

การประกาศเวอร์ชันสามารถทิ้งได้

เพื่อหลีกเลี่ยงการรับ a gem.lock errorให้เรียกใช้bundle updateแทนbundle installมิฉะนั้นจะมีการอัปเดตเฉพาะอัญมณี

ตอนนี้heroku logs -tคำสั่งสามารถใช้เพื่อตรวจสอบเซิร์ฟเวอร์ heroku เพื่ออัปโหลดรูปภาพ

ฉันได้รับข้อผิดพลาดใหม่Access Denied Errorในเบื้องต้นสำหรับเซิร์ฟเวอร์ AWS

ในการแก้ไขปัญหานี้ฉันพบActive Access Key IDวันที่ล่าสุดบนเว็บไซต์ Amazon และใช้คำสั่ง heroku เพื่อป้อนข้อมูลล่าสุดAccess key IDและSecret access key.

สิ่งนี้ทำให้ฉันสามารถดูภาพของฉันบน heroku ได้

ฉันทำมามากมายAccess key IDและSecret access keysพยายามแก้ไขปัญหา แต่พบว่าอัญมณีเป็นปัญหาที่แท้จริง

เคล็ดลับ: บันทึกข้อมูลคีย์การเข้าถึงทั้งหมดของคุณไปยัง OneNote, Notepad และอื่น ๆ ด้วยวิธีนี้คุณสามารถย้อนกลับและตรวจสอบได้


ฉันพบปัญหาเดียวกันคุณได้แก้ไขโดยการลบเวอร์ชันหรือไม่
Gary Wallen

3

Paperclip ใช้เพื่อใช้ AWS-SDK v1 ในเวอร์ชัน 4.3 และร้อง พวกเขากำลังพยายามรวม AWS-SDK v2

เอกสารอัปเกรดอย่างเป็นทางการhttps://github.com/thoughtbot/paperclip/blob/master/UPGRADING

##################################################
#  NOTE FOR UPGRADING FROM 4.3.0 OR EARLIER       #
##################################################

Paperclip is now compatible with aws-sdk >= 2.0.0.

If you are using S3 storage, aws-sdk >= 2.0.0 requires you to make a few small
changes:

* You must set the `s3_region`
* If you are explicitly setting permissions anywhere, such as in an initializer,
  note that the format of the permissions changed from using an underscore to
  using a hyphen. For example, `:public_read` needs to be changed to
  `public-read`.

เนื่องจากความไม่สามารถในการย้อนกลับบางอย่าง (อ่านที่https://github.com/thoughtbot/paperclip/issues/2021 ) สิ่งนี้ถูกรวมเข้าด้วยกัน แต่ยังไม่ได้เปิดตัวอย่างเป็นทางการ แต่ควรปล่อยใน Paperclip v5.0.0

เช่นเดียวกับที่Vitali Mogilevskyกล่าวถึงคุณต้องใช้สิ่งนี้ในตอนนี้:

# Gemfile
# ...
gem 'paperclip', :git=> 'https://github.com/thoughtbot/paperclip', :ref => '523bd46c768226893f23889079a7aa9c73b57d68'

เมื่อปล่อย Paperclip 5.0 ควรรวม AWS-SDK v2

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.