在将数据库从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
仅供参考,在此应用中,注册用户可以将图像上传到该应用,因此我无法保存我只想要的照片。
由于您不确定上载文件的路径,因此我相信您的问题就在那里。 我没有使用Heroku太多,但是从他们的文章中可以得出:
每个dyno都有自己的临时文件系统,其中包含最新部署的代码的新副本。 在dyno的生命周期中,其正在运行的进程可以将文件系统用作临时暂存器,但是任何其他dyno中的进程都看不到已写入的文件,并且在dyno停止或重新启动时,所有写入的文件都将被丢弃。 例如,在由于应用程序部署而更换测功机的任何时候都会发生这种情况,并且在正常测功机管理的一部分中大约每天一次。
因此,如果将图像上载到代码文件系统,则其他进程看不到它们,或者在替换dyno后将其丢弃,因为在heroku替换dyno时,它将仅考虑上次部署中部署的文件。 并且没有上传的图像。
因此,我建议您使用CDN,例如AWS S3。
您的问题有两个问题,第一个问题是尝试直接在Heroku上安装PGSql。
请理解,与Digital ocean或AWS的共享服务器不同,Heroku是PaaS(平台即服务),您无法在除rails应用程序之外的任何东西上放置任何东西。 您必须通过插件使用它们。
添加PGSql也有自己的添加项,它将自动为您进行定期备份,并且将进行优化以执行数据库操作。
在此处了解更多信息: https : //elements.heroku.com/addons/heroku-postgresql
同样,Heroku不鼓励在服务器上存储静态资产,因为每次重启服务器时都会回收静态资产,因此每次部署时都必须编译资产。 为了使它更好,请将它们上传到CDN或S3。