NameError (Kẹp giấy hằng số chưa được khởi tạo :: Bộ nhớ :: S3 :: AWS):


91

Tôi đang cố gắng kết hợp hình ảnh vào ứng dụng web của mình và tôi tiếp tục gặp lỗi này sau khi xóa một số tính năng. Nó đến trình điều khiển ứng dụng 'tạo' của tôi và tôi không hoàn toàn chắc chắn mình nên đi đâu từ đây.

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

Bạn đang triển khai Heroku?
Ahmad Al-kheat

Có, tôi đã có và tôi đang tìm trong nhật ký heroku và tìm thấy lỗi đó.
EggSix

3
nó có khả năng nhất vì bạn đã không khởi tạo hằng AWS tại Heroku, bạn cần phải chạy $ Heroku cấu hình: bộ S3_BUCKET_NAME = your_bucket_name $ Heroku cấu hình: bộ AWS_ACCESS_KEY_ID = your_access_key_id $ Heroku cấu hình: bộ AWS_SECRET_ACCESS_KEY = your_secret_access_key
Ahmad Al-kheat

hmmm tôi đã làm theo bước đó nhưng tôi sẽ bắt đầu khắp nơi trên chỉ để chắc chắn rằng nó là đúng
EggSix

Được rồi, hãy cho tôi biết nếu nó hoạt động để tôi có thể biến nó thành một câu trả lời cho những người khác cũng được hưởng lợi.
Ahmad Al-kheat

Câu trả lời:


179

Sửa đổi aws-sdk của Gemfile của bạn để cài đặt phiên bản trước 2.0:

gem 'aws-sdk', '< 2.0'

Vấn đề này đã được giới thiệu với phiên bản mới của aws-sdk (2.0+). Bạn có thể đọc thêm tại đây: http://ruby.awsblog.com/post/TxFKSK2QJE6RPZ/Upcoming-Stable-Release-of-AWS-SDK-for-Ruby-Version-2


2
Tôi thấy rằng lý do là trong đá quý 'aws-sdk' được cập nhật. Có một phiên bản mới (2+) của aws-sdk không tương thích ngược với các phiên bản trước. Bạn có thể đọc thêm một chút ở đây:
TopaZ

Cảm ơn bạn, chính xác những gì tôi cần!
Sprachprofi

27
Ngoài ra, bạn có thể thay thế dòng đó bằng gem 'aws-sdk-v1'. Sau đó, điều này cho phép bạn lấy gem v2 aws-sdk. Chúng có thể được sử dụng cùng nhau trong cùng một ứng dụng vì không gian tên khác nhau.
Trevor Rowe

Giải pháp của Trevor Rowe đã hoạt động hoàn hảo đối với tôi - và thực tế là chúng có thể được sử dụng đồng thời là rất hữu ích. Cảm ơn Trevor!
XtraSimparies

18

Đã có giải pháp chính thức Sử dụng kẹp giấy từ chi nhánh này: nó hoạt động với các phiên bản aws-sdk trên 2

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

chỉ cần thêm: tham số s3_region vào cấu hình s3 kẹp giấy của bạn

làm việc cho tôi


1
Đây là câu trả lời tốt nhất hiện tại, vì aws 1 không được dùng nữa.
ardochhigh

4

Tôi đã làm cho nó hoạt động bằng cách điều hướng đến thư mục đá quý của tôi và thay đổi Đá quý thành:

  • đá quý 'kẹp giấy'
  • đá quý 'aws-sdk'

Khai báo phiên bản có thể bị loại bỏ.

Để tránh nhận được một gem.lock error, hãy chạy bundle updatethay vì bundle install, nếu không, chỉ những viên ngọc mới được cập nhật.

Bây giờ, heroku logs -tlệnh có thể được sử dụng để giám sát máy chủ heroku tải lên hình ảnh.

Tôi đã sớm nhận được một lỗi mới Access Denied Errorcho máy chủ AWS.

Để khắc phục điều này, tôi đã tìm thấy Active Access Key IDngày mới nhất trên trang web Amazon và sử dụng các lệnh heroku để nhập Access key IDvà mới nhất Secret access key.

Điều này cho phép tôi xem hình ảnh của mình trên heroku.

Tôi đã thực hiện rất nhiều Access key IDSecret access keyscố gắng khắc phục sự cố, nhưng nhận thấy Đá quý mới là vấn đề thực sự.

Mẹo: Lưu tất cả thông tin Khóa truy cập của bạn vào OneNote, Notepad, v.v. Bằng cách này, bạn có thể quay lại và kiểm tra chúng.


Tôi đang gặp phải vấn đề tương tự, bạn đã giải quyết nó bằng cách xóa các phiên bản chưa?
Spartacus38

3

Sử dụng kẹp giấy để sử dụng AWS-SDK v1 trong phiên bản 4.3 và dưới đây. Họ đang cố gắng bao gồm AWS-SDK v2

tài liệu nâng cấp chính thức 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`.

do một số điểm không thể so sánh ngược lại (đọc https://github.com/thoughtbot/paperclip/issues/2021 ) này đã được hợp nhất nhưng chính thức chưa được phát hành, nhưng sẽ được phát hành trong Paperclip v5.0.0

Vì vậy, như Vitali Mogilevsky đã đề cập, bạn phải sử dụng cái này ngay bây giờ:

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

Khi Paperclip 5.0 được phát hành, AWS-SDK v2 sẽ được bao gồm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.