在将数据库从sqlite3更改为postgres之后,我已使用Cloud9将我的应用程序部署到heroku。我的应用程序在此之后表现不佳。例如,生产中的图像在上传两三个小时后就会中断,这很糟糕。我还必须每隔几小时启动一次PostgreSQL,以便能够使用开发sudo service postgresql start
。
这是我的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
仅供参考,在此应用中,注册的用户可以将图片上传到应用,因此我无法保存我想要的图片。
答案 0 :(得分:2)
由于您不确定上传文件的路径,我相信您的问题就在那里。 我没有多少使用Heroku,而是使用了article:
每个dyno都有自己的短暂文件系统,并带有最近部署代码的全新副本。在dyno的生命周期中,其运行进程可以将文件系统用作临时暂存器,但是任何其他dyno中的进程都不会看到所写的文件,并且在dyno停止或重新启动时,所写的任何文件都将被丢弃。例如,每次因应用程序部署而更换dyno时都会发生这种情况,并且大约每天一次作为正常dyno管理的一部分。
因此,如果您的图像上传到文件系统的代码,它们对其他进程不可见,或者在更换dyno后会被删除,因为当heroku替换dyno时,它只考虑在上次部署中部署的文件。并且没有上传的图像。
所以我建议你使用像AWS S3这样的CDN。
答案 1 :(得分:0)
你的问题有两个问题,第一个是尝试直接在Heroku上安装PGSql。
了解与Digital Ocean或AWS的共享服务器不同,Heroku是一种PaaS(平台即服务),除了rails应用程序之外,您无法在heroku服务器上放置任何内容。您必须通过add-ons使用它们。
添加PGSql也有自己的添加,它将自动为您定期备份,并且将更加优化以进行数据库操作。
在此处了解详情: https://elements.heroku.com/addons/heroku-postgresql
此外,Heroku不鼓励在服务器上存储静态资产,因为每次重新启动服务器时都会对其进行回收,因此每次部署时都必须编译资产。为了做到这一点,请将它们上传到CDN或S3。