这是我最近遇到的问题的延续 - Stack Level Too Deep error - produced with strong parameters I think
每当我进行Post
创建(涉及文件上传)时,我都会收到此错误:
Started POST "/posts" for 127.0.0.1 at 2014-08-28 08:47:09 -0500
Processing by PostsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"daUAMfiQZ/uiD/0ADg=", "post"=>{"status"=>"confirmed", "title"=>"Ashlee lost 10 pounds in 5 weeks", "photo"=>#<ActionDispatch::Http::UploadedFile:0x000001038f04b8 @tempfile=#<Tempfile:/var/folders/0f/hgplttnd7dg6q9m62qtbnpn00000gn/T/RackMultipart20140828-89271-qwxck1>, @original_filename="Ashlee-Testimonial.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"post[photo]\"; filename=\"Ashlee-Testimonial.png\"\r\nContent-Type: image/png\r\n">, "body"=>"She lost 10 pounds in 5 weeks doing 10PP."}, "commit"=>"Submit"}
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
(0.4ms) SELECT COUNT(*) FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = $1 AND (((roles.name = 'admin') AND (roles.resource_type IS NULL) AND (roles.resource_id IS NULL))) [["user_id", 1]]
(0.2ms) BEGIN
SQL (2.2ms) INSERT INTO "posts" ("body", "created_at", "photo", "status", "title", "updated_at", "user_id") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [["body", "She lost 10 pounds in 5 weeks doing 10PP."], ["created_at", "2014-08-28 13:47:09.320765"], ["photo", "Ashlee-Testimonial.png"], ["status", "confirmed"], ["title", "Ashlee lost 10 pounds in 5 weeks"], ["updated_at", "2014-08-28 13:47:09.320765"], ["user_id", 1]]
Digest::Digest is deprecated; use Digest
(0.3ms) ROLLBACK
Completed 500 Internal Server Error in 10904ms
Excon::Errors::SocketError - Broken pipe:
我的Post
模型如下所示:
# == Schema Information
#
# Table name: posts
#
# id :integer not null, primary key
# status :string(255)
# title :string(255)
# date :datetime
# photo :string(255)
# body :text
# created_at :datetime
# updated_at :datetime
# user_id :integer
# ancestry :string(255)
# file :string(255)
#
class Post < ActiveRecord::Base
has_ancestry
belongs_to :user
resourcify
mount_uploader :photo, ImageUploader
mount_uploader :file, FileUploader
end
我的控制器看起来像这样:
def create
@post = current_user.posts.new(post_params)
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json { render :show, status: :created, location: @post }
else
format.html { render :new }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
private
# Never trust parameters from the scary internet, only allow the white list through.
def post_params
params.require(:post).permit(:status, :title, :date, :photo, :body, :parent_id)
end
这是我的image_uploader.rb
:
# encoding: utf-8
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :fog
include CarrierWave::MimeTypes
process :set_content_type
def store_dir
"images/#{model.id}-#{model.created_at}"
end
version :thumb do
process :resize_to_fit => [80, 80]
end
version :large do
process :resize_to_limit => [400, 400]
end
def extension_white_list
%w(jpg jpeg gif png)
end
end
这是我的Gemfile:
source 'https://rubygems.org'
gem 'rails', '4.1.1'
group :assets do
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem "font-awesome-rails"
gem 'bootstrap-sass', '~> 3.2.0'
gem 'autoprefixer-rails'
end
group :development do
gem 'annotate', github: 'ctran/annotate_models'
gem 'sextant'
gem "quiet_assets", ">= 1.0.2"
gem 'better_errors', '~> 1.1.0'
gem 'binding_of_caller', '~> 0.7.2'
gem 'meta_request'
gem 'execjs'
gem 'therubyracer'
gem "letter_opener"
gem 'bullet'
gem 'rack-mini-profiler'
gem 'guard-rails'
gem 'rb-fchange', :require=>false
gem 'rb-fsevent', :require=>false
gem 'rb-inotify', :require=>false
gem 'guard-livereload', '~> 2.3.0', :require=>false
gem 'rack-livereload', '~> 0.3.15'
end
group :production do
gem 'rails_12factor'
end
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'spring', group: :development
gem 'devise', '~> 3.2.4'
gem 'thin'
gem 'pg'
gem 'cancancan', '~> 1.8.2'
gem 'rolify'
gem 'rmagick', :require => 'RMagick'
gem "mini_magick"
gem 'carrierwave', '~> 0.10.0'
gem "fog", "~> 1.3.1"
gem 'figaro', '~> 0.7.0'
gem 'geocoder', '~> 1.2.2'
gem 'social-share-button', '~> 0.1.6'
gem 'ancestry', '~> 2.1.0'
gem "simple_form"
这是我的上传表单部分:
<%= simple_form_for @post do |f| %>
<%= f.error_notification %>
<%= f.input :parent_id, as: :hidden %>
<% if can? :manage, @post %>
<%= f.input :status, collection: Status.all %>
<% end %>
<%= f.input :title %><br />
<%= f.input :date %><br />
<%= f.input :photo %><br />
<%= f.input :body %><br />
<%= f.button :submit %>
<% end %>
这是我的config/carrierwave.rb
文件:
CarrierWave.configure do |config|
config.fog_credentials = {
provider: 'AWS',
region: 'us-east-1',
aws_access_key_id: ENV["AWS_ACCESS_KEY"],
aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
}
config.fog_directory = ENV["AWS_MY_BUCKET"]
end
可能导致此问题的任何想法?
更新1
这是一些更多的调试信息。删除图像大小后,Socket Error消息就会消失。
但这是我得到的新错误:
Digest::Digest is deprecated; use Digest
(0.2ms) ROLLBACK
Completed 500 Internal Server Error in 7372ms
Excon::Errors::Forbidden - Expected(200) <=> Actual(403 Forbidden)
request => {:connect_timeout=>60, :headers=>{"Content-Length"=>225260, "Content-Type"=>"image/png", "x-amz-acl"=>"public-read", "Date"=>"Thu, 28 Aug 2014 16:34:11 +0000", "Authorization"=>"AWS PUBLIC_KEY:SECRET_KEY=", "Host"=>"my_site.s3.amazonaws.com:443"}, :instrumentor_name=>"excon", :mock=>false, :read_timeout=>60, :retry_limit=>4, :ssl_ca_file=>"/.rvm/gems/ruby-2.1.1@my_site/gems/excon-0.13.4/data/cacert.pem", :ssl_verify_peer=>true, :write_timeout=>60, :host=>"my_site.s3.amazonaws.com", :path=>"/images%2F7-2014-08-28+16%3A34%3A11+UTC%2F10pp-main-banner.png", :port=>"443", :query=>nil, :scheme=>"https", :body=>#<File:/myapp/public/uploads/tmp/1409243651-91536-3147/10pp-main-banner.png>, :expects=>200, :idempotent=>true, :method=>"PUT"}
response => #<Excon::Response:0x000001035f0f88 @body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.</Message><RequestId>2FDE1E67B32981B7</RequestId><HostId>itxnvlzNTkJ29N3MtyYmL8EP29zrW6s9Hr6Xc2P7QzTElkB56OU26WdzsE/6vSz1</HostId><AWSAccessKeyId>AKIAISIFEOAKO3CNPZTA</AWSAccessKeyId></Error>", @headers={"x-amz-request-id"=>"2FDE1E67B32981B7", "x-amz-id-2"=>"itxnvlzNTkJ29N3MtyYmL8EP29zrW6s9Hr6Xc2P7QzTElkB56OU26WdzsE/6vSz1", "Content-Type"=>"application/xml", "Transfer-Encoding"=>"chunked", "Date"=>"Thu, 28 Aug 2014 16:34:16 GMT", "Connection"=>"close", "Server"=>"AmazonS3"}, @status=403>:
答案 0 :(得分:2)
我认为它可能与语言环境有关。
这是一个使用s3的人的例子,但这是一个相同的想法。 they说出以下内容:
我最近在我的网站上工作,遇到了通过Carrierwave / Fog将更大的文件(如1.8M)上传到S3的问题。我收到以下错误:Excon :: Errors :: SocketError(Broken pipe(Errno :: EPIPE)):
我发现需要在我的carrierwave.rb初始化程序文件中设置区域代码才能上传更大的文件。显然它默认使用某个区域代码而不是我使用的区域代码,并且由于某种原因导致在上传较大文件时出错。
要查找区域代码,请在S3中导航到已存储的实际文件并单击它,然后单击屏幕右上角的“属性”。您将看到类似以下内容的链接:
在这种情况下,以下是您应在配置中设置的区域代码:us-west-2
答案 1 :(得分:1)
我明白了。发生了什么事我在AWS IAM中为这个应用程序创建了一个新用户,但我没有给该用户提供正确的凭据。即我从未创建安全策略或将其分配给组。所以它产生了403错误。
现在我已经解决了这个问题,一切顺利。
我希望这有助于其他人。