当前位置: 首页 > 知识库问答 >
问题:

错误尝试上传图片Heroku Web应用程序与AS3(作品在生产)迈克尔·哈特尔第11章

陈斌
2023-03-14

我正在做迈克尔·哈特的辅导。第11章。

我的应用程序在产品中上传图片,但在我部署它时不会上传,但是文本MicroPost确实可以工作,所以问题出在AmazonS3的某个地方

我已将S3上的权限设置为“everyone”,以便在我的bucket上上载/删除。

我已经在我的heroku帐户上设置了正确的S3键,使用rails控制台在代码中没有它们(如教程建议的)。

以下是我尝试在web应用程序上上载内容时出现的错误消息的副本:

2014-11-07T10:25:23.192777+00:00 app[web.1]:    (2.2ms)  BEGIN
2014-11-07T10:25:23.198717+00:00 app[web.1]:   SQL (2.1ms)  INSERT INTO "microposts" ("content", "created_at", "picture", "updated_at", "user_id") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["content", "Wont work "], ["created_at", "2014-11-07 10:25:23.194942"], ["picture", "BALI_BLOG.jpg"], ["updated_at", "2014-11-07 10:25:23.194942"], ["user_id", 101]]
2014-11-07T10:25:28.198243+00:00 heroku[router]: at=info method=POST path="/microposts" host=cryptic-falls-5768.herokuapp.com request_id=eb6bfb98-4146-4268-aaec-817aa15c7e51 fwd="114.129.16.105" dyno=web.1 connect=1ms service=6
632ms status=500 bytes=1786
2014-11-07T10:25:28.195098+00:00 app[web.1]: Completed 500 Internal Server Error in 5613ms
2014-11-07T10:25:28.197697+00:00 app[web.1]: excon.error.response
2014-11-07T10:25:28.197714+00:00 app[web.1]:     "x-amz-request-id" => "75844FA2260D74EC"
2014-11-07T10:25:28.197695+00:00 app[web.1]: Excon::Errors::Forbidden (Expected(200) <=> Actual(403 Forbidden)
2014-11-07T10:25:28.197712+00:00 app[web.1]:     "x-amz-id-2"       => "9Lm1JyP7J8nLkOhAo0eXtlmoaR2bBf+tJj6z0WZWApxAiRO1n7gCwWtWer5LrkH8RLCKf4K4Eg4="
2014-11-07T10:25:28.193952+00:00 app[web.1]:    (2.1ms)  ROLLBACK
2014-11-07T10:25:28.197715+00:00 app[web.1]:   }
2014-11-07T10:25:28.197717+00:00 app[web.1]:   :local_address => "172.18.66.78"
2014-11-07T10:25:28.197718+00:00 app[web.1]:   :local_port    => 22004
2014-11-07T10:25:28.197720+00:00 app[web.1]:   :reason_phrase => "Forbidden"
2014-11-07T10:25:28.197721+00:00 app[web.1]:   :remote_ip     => "54.231.242.81"
2014-11-07T10:25:28.197723+00:00 app[web.1]:   :status        => 403
2014-11-07T10:25:28.197724+00:00 app[web.1]: ):
2014-11-07T10:25:28.197706+00:00 app[web.1]:     "Connection"       => "close"
2014-11-07T10:25:28.197725+00:00 app[web.1]:   app/controllers/microposts_controller.rb:7:in `create'
2014-11-07T10:25:28.197708+00:00 app[web.1]:     "Content-Type"     => "application/xml"
2014-11-07T10:25:28.197727+00:00 app[web.1]: 
2014-11-07T10:25:28.197711+00:00 app[web.1]:     "Server"           => "AmazonS3"
2014-11-07T10:25:28.197728+00:00 app[web.1]: 
2014-11-07T10:25:28.197692+00:00 app[web.1]: 
2014-11-07T10:25:28.197703+00:00 app[web.1]:   :body          => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>75844FA2260D74EC</RequestId><HostId>9Lm1JyP7J8nLkOhAo0eXtlmoaR2bBf+tJj6z0WZWApxAiRO1n7gCwWtWer5LrkH8RLCKf4K4Eg4=</HostId></Error>"
2014-11-07T10:25:28.197705+00:00 app[web.1]:   :headers       => {
2014-11-07T10:25:28.197709+00:00 app[web.1]:     "Date"             => "Fri, 07 Nov 2014 10:25:27 GMT"

此外,以下是相关文件中的代码:

/配置/初始化器/载波。铷

if Rails.env.production?
  CarrierWave.configure do |config|
    config.fog_credentials = {
      # Configuration for Amazon S3
      :provider              => 'AWS',
      :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
      :aws_secret_access_key => ENV['S3_SECRET_KEY'],
      :region  => ENV['S3_REGION']
    }
    config.fog_directory     =  ENV['S3_BUCKET']
  end
end

Congig/环境/生产

    Rails.application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # Code is not reloaded between requests.
  config.cache_classes = true

  # Eager load code on boot. This eager loads most of Rails and
  # your application in memory, allowing both threaded web servers
  # and those relying on copy on write to perform better.
  # Rake tasks automatically ignore this option for performance.
  config.eager_load = true

  # Full error reports are disabled and caching is turned on.
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # Enable Rack::Cache to put a simple HTTP cache in front of your application
  # Add `rack-cache` to your Gemfile before enabling this.
  # For large-scale production use, consider using a caching reverse proxy like
  # NGINX, varnish or squid.
  # config.action_dispatch.rack_cache = true

  # Disable Rails's static asset server (Apache or NGINX will already do this).
  config.serve_static_assets = false

  # Compress JavaScripts and CSS.
  config.assets.js_compressor = :uglifier
  # config.assets.css_compressor = :sass

  # Do not fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = false

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = true

  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb

  # Specifies the header that your server uses for sending files.
  # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
   config.force_ssl = true

  # Decrease the log volume.
  # config.log_level = :info

  # Prepend all log lines with the following tags.
  # config.log_tags = [ :subdomain, :uuid ]

  # Use a different logger for distributed setups.
  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)

  # Use a different cache store in production.
  # config.cache_store = :mem_cache_store

  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
  # config.action_controller.asset_host = 'http://assets.example.com'

  # Ignore bad email addresses and do not raise email delivery errors.
  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  host = 'cryptic-falls-5768.herokuapp.com'
  config.action_mailer.default_url_options = { host: host }
  ActionMailer::Base.smtp_settings = {
    :address        => 'smtp.sendgrid.net',
    :port           => '587',
    :authentication => :plain,
    :user_name      => ENV['SENDGRID_USERNAME'],
    :password       => ENV['SENDGRID_PASSWORD'],
    :domain         => 'heroku.com',
    :enable_starttls_auto => true
   }
  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation cannot be found).
  config.i18n.fallbacks = true

  # Send deprecation notices to registered listeners.
  config.active_support.deprecation = :notify

  # Use default logging formatter so that PID and timestamp are not suppressed.
  config.log_formatter = ::Logger::Formatter.new

  # Do not dump schema after migrations.
  config.active_record.dump_schema_after_migration = false
end

这是我第一次真正部署web应用程序,也是第一次使用S3,但我严格遵循了每一步,并在键入后验证了我的代码是否与教程中的代码完全相同。

请让我知道,如果有任何额外的代码,我可以提供帮助解决这个问题。

非常感谢。

共有3个答案

郭俊人
2023-03-14

我也有同样的问题。我认为这是一个权限问题,而且您的日志似乎也在这样说。查看AWS控制台上的IAM仪表板。确保该用户是某个组的成员,并且该组具有管理员级别的权限。这个给我修好了!

祝你好运

麻和雅
2023-03-14

我通过将初始值设定项文件名更改为carrierwave解决了问题。用rb代替载波。铷

希望这行得通。

帅彦
2023-03-14

我发现这个答案很有帮助。https://stackoverflow.com/a/28465489

您需要将amazons3fullaccess策略附加到用户。

设置IAM用户时,amazon演练会告诉您将策略附加到bucket本身。他们给出的示例仅包括bucket的putobject和getobject操作。但是我认为上传需要很多操作的权限。

 类似资料:
  • 我在研究Michael 但我在我的代码中产生了一个竞赛,并认为算法中可能存在竞赛。 我在这里阅读了论文:简单、快速和实用的非阻塞和阻塞并发队列算法,原始的取消排队伪代码如下: 在我看来,比赛是这样的: < li >线程1前进到D3,然后停止。 < li >线程2前进到D3,读取与线程1相同的磁头。 < li >线程2幸运地一直前进到D20,在D19它释放了head.ptr < li >线程1继续前

  • Im使用okhttp 2.5.0,Im获取一张pic,然后将其转换为base 64格式,然后将其作为post变量发送到服务器,然后将其解码回jpg格式并保存到服务器....当我使用像1兆像素(0.5MB)的小图像时,它可以完美地工作······但是当我增加分辨率时,这个异常发生了...

  • 专业:电子信息 岗位:产品测试工程师 1、自我介绍 2、研究生阶段做的和电子信息相关的地方在哪里(涉及到硬件相关的东西吗) 3、专业课是光学方向吗? 4、描述研究生阶段的课题 5、现在找工作是想做电子行业是吗?研究生期间的经历对这个工作有什么影响? 6、讲毕业设计 7、整个系统都是自己设计的? 8、取号系统和叫号系统分别有自己的控制器?控制器型号? 9、板上的原理图和PCB都是自己做的? 10、单

  • 专业:电子信息 岗位:产品测试工程师 1、自我介绍 2、研究生阶段做的和电子信息相关的地方在哪里(涉及到硬件相关的东西吗) 3、专业课是光学方向吗? 4、描述研究生阶段的课题 5、现在找工作是想做电子行业是吗?研究生期间的经历对这个工作有什么影响? 6、讲毕业设计 7、整个系统都是自己设计的? 8、取号系统和叫号系统分别有自己的控制器?控制器型号? 9、板上的原理图和PCB都是自己做的? 10、单

  • 我正在尝试在 Haskell 中实现一个函数,该函数返回一个列表,其中包含玩家的所有可能动作。该函数的唯一参数是一个字符串,由棋盘的实际状态(在福赛斯-爱德华兹符号中)组成,后跟移动的玩家(b/w)。 符号示例:rnbqkbnr/pppppp/8/8/8/PPPPPPP/rnbqkbnr w(起始板状态) 移动以[origin]-[destination]格式的字符串传输。目的地始终是形式[col

  • 我有一个SpringBoot应用程序和一组应用程序。不同配置文件的yaml文件。 这些文件位于类路径中,没有额外的配置来切换它们,只需在intellij的配置“活动配置文件”部分更改配置文件。 我的一个Spring豆子依赖财产 它有一个如下所示的构造函数 如果appUrl在属性文件中不存在,这一点的全部意义就是使bean构造失败(从而导致应用程序无法启动)。 在application.yamlap