更新 今天早上我注意到以下列表在heroku日志中稍微高一点:
excon.error.response
2016-11-06T18:17:48.973789+00:00 app[web.1]: :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'us-west-1'</Message><Region>us-west-1</Region><RequestId>...</RequestId><HostId>...</HostId></Error>"
将:region => ENV[’S3_REGION’]
添加到我的雾凭据,然后在命令行运行heroku config:set S3_REGION=us-west-1
后,图片上传正在生产中!所以大约一半的问题都解决了 - 我仍然完全不明白为什么创建动作在生产和开发中都会引起我的问题 - 特别是考虑到两种环境的完全不同的配置。我怀疑,在开发过程中,if @micropost.save
导致了问题,因为在亚马逊的Web服务中,错误被删除了几层。我对这个问题没有一个明确的答案,但我会将其标记为已解决 - 实际上,它是。
我即将结束迈克尔·哈特尔的Ruby on Rails教程,就在我实现图像上传到用户微博的最后,我收到了一个非常神秘的错误:异常重新进入。
似乎认为问题出在我的微动作控制器下的创建动作中:
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to root_url
else
@feed_items = []
render 'static_pages/home'
end
end
...
private
def correct_user
@micropost = current_user.microposts.find_by(id: params[:id])
redirect_to root_url if @micropost.nil?
end
具体来说,它会突出显示if @micropost.save
行。
现在,在网上找到一些帮助之后,我使用了我的基本粘贴 - 迈克尔代码 - 代码 - 技术,令人惊讶的是,我得到了错误消失。我把它缩小到微博模型,这会导致一个问题:
class Micropost < ApplicationRecord
belongs_to :user
default_scope -> { order(created_at: :desc) }
mount_uploader :picture, PictureUploader
validates :user_id, presence: true
validates :content, presence: true, length: { maximum: 140 }
validate :picture_size
private
# Validates the size of an uploaded picture.
def picture_size
if picture.size > 5.megabytes
errors.add(:picture, "should be less than 5MB")
end
end
end
这不是:
class Micropost < ApplicationRecord
belongs_to :user
default_scope -> { order(created_at: :desc) }
mount_uploader :picture, PictureUploader
validates :user_id, presence: true
validates :content, presence: true, length: { maximum: 140 }
validate :picture_size
private
# Validates the size of an uploaded picture.
def picture_size
if picture.size > 5.megabytes
errors.add(:picture, "should be less than 5MB")
end
end
end
这是缩进问题吗?我不知道。无论如何,所以我继续使用亚马逊网络服务和heroku进行部署,我遇到了另一个错误,我的heroku日志中的这个条目突然出现了:
2016-11-06T04:53:11.814607+00:00 app[web.1]: F, [2016-11-06T04:53:11.814544 #10] FATAL -- : [...]
2016-11-06T04:53:11.814575+00:00 app[web.1]: ):
2016-11-06T04:53:11.814575+00:00 app[web.1]: :status_line => "HTTP/1.1 403 Forbidden\r\n"
2016-11-06T04:53:11.814662+00:00 app[web.1]: F, [2016-11-06T04:53:11.814615 #10] FATAL -- : [...] app/controllers/microposts_controller.rb:7:in `create'
所以我不能只是擦干净双手然后继续前进。这构成了我的问题: - 宽泛地说,什么是“异常重新进入”错误? - 我的缩进理论合理吗? - 我知道如何解决这个问题。
非常感谢你,我很绿,所以如果你需要更多的信息,请告诉我(如果这是一个愚蠢的错误,请耐心等待)。
作为参考,完整的微博控制器:
class MicropostsController < ApplicationController
before_action :logged_in_user, only: [:create, :destroy]
before_action :correct_user, only: :destroy
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to root_url
else
@feed_items = []
render 'static_pages/home'
end
end
def destroy
@micropost.destroy
flash[:success] = "Micropost deleted"
redirect_to request.referrer || root_url
end
private
def micropost_params
params.require(:micropost).permit(:content, :picture)
end
def correct_user
@micropost = current_user.microposts.find_by(id: params[:id])
redirect_to root_url if @micropost.nil?
end
end
答案 0 :(得分:0)
更新今天早上我注意到以下列表在heroku日志中稍微高一点:
excon.error.response
2016-11-06T18:17:48.973789+00:00 app[web.1]: :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'us-west-1'</Message><Region>us-west-1</Region><RequestId>...</RequestId><HostId>...</HostId></Error>"
将:region => ENV[’S3_REGION’]
添加到我的雾凭据后,然后运行heroku config:在命令行设置S3_REGION=us-west-1
,图片上传正在生产中!所以大约一半的问题都解决了 - 我仍然不完全理解为什么创建动作在生产和开发中都会引起我的问题 - 特别是考虑到两种环境的完全不同的配置。我怀疑,在开发过程中,if @micropost.save
导致了问题,因为在亚马逊的Web服务中错误被删除了几层。我对这个问题没有明确的答案,但我会将其标记为已解决 - 实际上,它是。