Rails生产中的图像中断

问题描述 投票:0回答:2

在将数据库从sqlite3更改为postgres之后,我已经使用Cloud9将应用程序部署到了heroku。 在那之后,我的应用程序表现不佳。 例如,生产中的图像在上传两三个小时后就中断了,这很糟糕。 为了能够使用开发sudo service postgresql start我还必须每隔几个小时启动一次PostgreSQL。

这是我的database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: <%= ENV['USERNAME'] %>
  password: <%= ENV['PASSWORD'] %>
  host:     <%= ENV['IP'] %>

development:
  <<: *default
  database: sample_app_development

test:
  <<: *default
  database: sample_app_test

production:
  <<: *default
  database: sample_app_production

我还听说这与production.rb ,所以这是我的:

    Rails.application.configure do

  config.cache_classes = true

  config.eager_load = true

  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true


  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?


  config.assets.js_compressor = :uglifier

  config.assets.compile = true


  config.assets.digest = true


  config.log_level = :debug


  config.i18n.fallbacks = true

  config.active_support.deprecation = :notify

  config.log_formatter = ::Logger::Formatter.new

  config.active_record.dump_schema_after_migration = false
end

仅供参考,在此应用中,注册用户可以将图像上传到该应用,因此我无法保存我只想要的照片。

ruby-on-rails ruby postgresql heroku cloud9-ide
2个回答
2
投票

由于您不确定上载文件的路径,因此我相信您的问题就在那里。 我没有使用Heroku太多,但是从他们的文章中可以得出:

每个dyno都有自己的临时文件系统,其中包含最新部署的代码的新副本。 在dyno的生命周期中,其正在运行的进程可以将文件系统用作临时暂存器,但是任何其他dyno中的进程都看不到已写入的文件,并且在dyno停止或重新启动时,所有写入的文件都将被丢弃。 例如,在由于应用程序部署而更换测功机的任何时候都会发生这种情况,并且在正常测功机管理的一部分中大约每天一次。

因此,如果将图像上载到代码文件系统,则其他进程看不到它们,或者在替换dyno后将其丢弃,因为在heroku替换dyno时,它将仅考虑上次部署中部署的文件。 并且没有上传的图像。

因此,我建议您使用CDN,例如AWS S3。


0
投票

您的问题有两个问题,第一个问题是尝试直接在Heroku上安装PGSql。

请理解,与Digital ocean或AWS的共享服务器不同,Heroku是PaaS(平台即服务),您无法在除rails应用程序之外的任何东西上放置任何东西。 您必须通过插件使用它们。

添加PGSql也有自己的添加项,它将自动为您进行定期备份,并且将进行优化以执行数据库操作。

在此处了解更多信息: https : //elements.heroku.com/addons/heroku-postgresql

同样,Heroku不鼓励在服务器上存储静态资产,因为每次重启服务器时都会回收静态资产,因此每次部署时都必须编译资产。 为了使它更好,请将它们上传到CDN或S3。

© www.soinside.com 2019 - 2024. All rights reserved.