image_tag 未在 aws beanstalk 生产模式下显示图像

Posted

技术标签:

【中文标题】image_tag 未在 aws beanstalk 生产模式下显示图像【英文标题】:image_tag not displaying image in aws beanstalk production mode 【发布时间】:2016-10-05 02:52:15 【问题描述】:

我有一个图像标签来显示我的头像。当我将它部署到 aws beanstalk 时,该标签在开发模式下工作,但不在生产模式下工作。我查看头像图片的位置显示为“img 0645”,这几乎就像图像已保存但以某种方式或 id 显示 img 名称一样。图片本身不显示!!怎么让图片显示???谢谢!!!

我正在使用

Postgres、puma、aws beanstalk、ruby on rails

不确定这是否有帮助,但我使用 Find 在日志中查找带有头像的任何内容,并想出了这些。

"GET /system/users/avatars/000/000/001/thumb/IMG_0645.JPG?1465126426 HTTP/1.1" 404 1564
"GET /system/users/avatars/000/000/001/medium/IMG_0645.JPG?1465126426 HTTP/1.1" 404 1564

Production.rb

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 serving static files from the `/public` folder by default since
  # Apache or NGINX already handles this.
  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

  # 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

  # Use the lowest log level to ensure availability of diagnostic information
  # when problems arise.
  config.log_level = :debug

  # 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 = false

  # 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

#allow pictures
  config.serve_static_assets = false


#for rails devise
  Rails.application.routes.default_url_options[:host] = 'http://essayfriends-env.ss8bhfhxct.us-west-2.elasticbeanstalk.com'
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default :charset => "utf-8"




end

【问题讨论】:

【参考方案1】:

尝试将此添加到您的config/environments/production.rb

config.serve_static_assets = false

【讨论】:

嘿大卫!我尝试了您的代码并重新部署,然后重新启动了服务器。但还是没有用。 production.rb 文件中的另一个配置是否与该语句冲突?? @MichaelLombardo 你确实有另一行在你的production.rb - config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? 中设置这个变量。您可以尝试将其注释掉。根本问题可能是让 nginx 为您提供静态文件,而不是默认的 rails 服务器,所以如果问题不在这里,可能是您的 ngnix 设置。 我不太确定如何设置 ngnix!我只创建了一个名为 .ebextensions 的文件夹,并添加了一个名为 01_files.config 的文件,但我无法着手增加 file_body_size。我试着把它注释掉,但它没有工作:/必须是 nginx 设置..我只是不知道怎么做。 这里有很多可以尝试的东西forums.aws.amazon.com/thread.jspa?threadID=150904 我更改了 config.serve_static_assets = true.. 我现在可以看到图片但是当我在浏览器中检查代码时,它似乎没有保存到 s3,而是保存在我的 rails 应用程序的公共文件夹中不好!我开始考虑迁移到heroku,直到aws修复了这个服务!!! :)。我真的不知道如何访问 ngnix 文件以查看里面有什么或在哪里可以找到它们。不确定我是在 aws 服务站点还是在我的 rails 应用程序中找到它们。我知道您通过应用程序为您的服务器设置命令,但我不知道如何查看 beanstalk 中的更改。或在beantalk中访问它们以查看!

以上是关于image_tag 未在 aws beanstalk 生产模式下显示图像的主要内容,如果未能解决你的问题,请参考以下文章

WAR 中的打包 JSON 文件未在 AWS 上获取

AWS Api Gateway 未在 204 上设置 CORS

AWS CodePipeline github webhook 未在提交时触发

Rails 应用程序未在弹性 beantalk aws 上加载资产

Django AWS RDS 环境变量未在 Elastic Beanstalk 中设置

大型 pdf 文件未在具有 aws 签名 url 的浏览器中打开