尝试在 Heroku 上部署,没有工作,现在本地服务器无法工作
Posted
技术标签:
【中文标题】尝试在 Heroku 上部署,没有工作,现在本地服务器无法工作【英文标题】:Tried deploying on Heroku, didn't work and now local server not working 【发布时间】:2013-08-22 00:07:58 【问题描述】:更新 - 已解决:我的本地服务器和 heroku 都无法工作。两个主要组件解决了这个问题。
感谢大家的帮助和支持!在这个学习过程中,知道有人愿意提供帮助是非常宝贵的;因此,我努力记录这个错误/解决方案,以便未来的编码人员少敲几下。
:( 我的应用程序在本地运行,然后我按照指示 推到 Heroku。
我收到 Heroku 的超级描述性和令人欣慰的错误信息:“我们是 抱歉,出了点问题。”
换句话说,现在我的应用程序无法在本地或 heroku 上运行...... 喜欢在您的帮助下解决这个问题。谢谢。
所以我尝试了一些东西(按此顺序):
我取出了gem 'sqlite3'
,换成了gem 'pg'
在我的 gemfile 中,包含ruby '2.0.0'
heroku rake db:迁移
我尝试先解决本地问题。
当我尝试使用 rails server(在本地测试)时,出现以下错误:
不知何故,在部署到 Heroku 时,与我的 Ruby 版本不一致,使用的是 2.0.0,而 gemfile 应该是 1.8。
ms.rb:777:in `report_activate_error': Could not find RubyGem rails (>= 0) (Gem::LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:211:in `activate'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:1056:in `gem'
from /usr/bin/rails:18
Davids-MacBook-Air-6:portfolio davidngo$ rails server
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:777:in `report_activate_error': Could not find RubyGem rails (>= 0) (Gem::LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:211:in `activate'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:1056:in `gem'
from /usr/bin/rails:18
为我解决了什么问题:
通过运行rvm reinstall ruby 2.0.0
重新安装了我的 ruby 2.0.0
Heroku 的主要问题:
State changed from starting to complete
2013-08-20T03:29:43.118968+00:00 heroku[run.2135]: Error R99 (Platform error) -> Failed to launch the dyno within 10 seconds
2013-08-20T03:29:43.119187+00:00 heroku[run.2135]: Stopping process with SIGKILL
2013-08-20T03:31:00.784270+00:00 heroku[router]: at=info method=GET path=/ host=shrouded-citadel-6554.herokuapp.com fwd="107.193.213.240" dyno=web.1 connect=2ms service=24ms status=500 bytes=643
2013-08-20T03:31:00.800238+00:00 app[web.1]:
2013-08-20T03:31:00.800238+00:00 app[web.1]: Started GET "/" for 107.193.213.240 at 2013-08-20 03:31:00 +0000
2013-08-20T03:31:00.800238+00:00 app[web.1]:
2013-08-20T03:31:00.802209+00:00 app[web.1]: Processing by CollectionsController#index as html
2013-08-20T03:31:00.808688+00:00 app[web.1]: Completed 500 Internal Server Error in 6ms
2013-08-20T03:31:00.810234+00:00 app[web.1]:
2013-08-20T03:31:00.810234+00:00 app[web.1]: WHERE a.attrelid = '"collections"'::regclass
2013-08-20T03:31:00.810234+00:00 app[web.1]: ^
2013-08-20T03:31:00.810234+00:00 app[web.1]: LINE 4: WHERE a.attrelid = '"collections"'::regclass
2013-08-20T03:31:00.810234+00:00 app[web.1]: : SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
2013-08-20T03:31:00.810234+00:00 app[web.1]: FROM pg_attribute a LEFT JOIN pg_attrdef d
2013-08-20T03:31:00.810234+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::Error: ERROR: relation "collections" does not exist
2013-08-20T03:31:00.810234+00:00 app[web.1]: ORDER BY a.attnum
2013-08-20T03:31:00.810234+00:00 app[web.1]: ON a.attrelid = d.adrelid AND a.attnum = d.adnum
2013-08-20T03:31:00.810234+00:00 app[web.1]: AND a.attnum > 0 AND NOT a.attisdropped
2013-08-20T03:31:00.810392+00:00 app[web.1]: ):
2013-08-20T03:31:00.810392+00:00 app[web.1]: app/controllers/collections_controller.rb:4:in `index'
2013-08-20T03:31:00.810392+00:00 app[web.1]:
2013-08-20T03:31:00.810392+00:00 app[web.1]:
2013-08-20T03:31:01.224316+00:00 heroku[router]: at=info method=GET path=/favicon.ico host=shrouded-citadel-6554.herokuapp.com fwd="107.193.213.240" dyno=web.1 connect=3ms service=8ms status=200 bytes=0
为我解决了什么问题:
heroku pg:reset DATABASE --confirm YOUR_APP_NAME
heroku run rake db:setup
heroku restart
heroku open
此线程中的类似错误:Heroku Postgres Error: PGError: ERROR: relation "organizations" does not exist (ActiveRecord::StatementInvalid)
可能有帮助的相关线程:How to empty DB in heroku(清空数据库、播种数据等)
相关和重要文件:
在 database.yml 中: 发展: 适配器:sqlite3 数据库:db/development.sqlite3 游泳池:5 超时:5000
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: postgresql
encoding: utf8
database: portfolio_production
pool: 5
username:
password:
在 Gemfile 中:
source 'https://rubygems.org'
ruby '2.0.0'
gem 'rails', '3.2.3'
group :development, :test do
gem 'sqlite3'
end
group :production do
gem 'pg'
end
【问题讨论】:
您尝试在本地解决什么问题?您是否安装了 PostgreSQL 并配置database.yml
指向它?
@ChrisPeters 感谢您的帮助——您在本地解决问题的评论帮助我在解决世界问题之前首先专注于这一点
【参考方案1】:
看起来 Heroku 在部署时没有运行 db:migrate。
尝试运行
#heroku run rake db:migrate
再次部署后在控制台上。
运行迁移后,您需要使用
重新启动您的应用#heroku restart
重新加载架构并获取任何架构更改。
【讨论】:
【参考方案2】:您仍然可以使用 sqlite 进行开发,您的 Gemfile
应该如下所示:
group :development, :test do
gem 'sqlite3'
end
group :production do
gem 'pg'
end
这将让您在 Heroku(生产模式)上使用 postgresql
并在本地使用 sqlite
。
不要忘记在 Heroku 上部署后立即运行数据库迁移。您可以使用heroku run rake db:migrate
命令运行迁移。
【讨论】:
在生产和开发中使用不同的数据库不是一个好主意。很多人在这里遇到不兼容导致的细微错误。 @JonMountjoy 你有推荐的资源来为 Rails 应用程序进行 PostgreSql 生产和开发吗?我绝对想实施这个最佳实践。有道理。 Chris 说的 :-) 真棒@dngoo - 拥有平等总是更好。 感谢 @ChrisPeters 和 Jon 将我指向 Postgresapp 并让我接触到术语“平价”。浸泡一切!【参考方案3】:您需要更改您的database.yml
文件以反映新的adapter
。此外,您应该在本地设置 postgres。
新的database.yml
文件应该看起来像 -
修改database.yml
运行后
在 Postgres 中创建新的数据库。
【讨论】:
【参考方案4】:您可以在本地使用与生产环境不同的适配器,这没问题。部署到 Heroku 时,您需要手动运行迁移,这不是部署过程的一部分。
因此,您首先定期部署它,然后运行heroku run rake --trace db:migrate
。您看到的错误告诉您 Collection 模型的表不存在。
【讨论】:
嘿@Christoph Eicke -- 感谢您的回复。我运行了您所说的内容,并得到了以下信息(上面已更新)。 Heroku 应用仍然无法运行。 你能发布你的集合模型的迁移吗? 刚刚发布!迫不及待地想最终弄清楚这件事!谢谢你的帮助——我还是个初学者:)以上是关于尝试在 Heroku 上部署,没有工作,现在本地服务器无法工作的主要内容,如果未能解决你的问题,请参考以下文章
node.js 项目在本地机器上工作,在 Heroku 上部署时出现问题
在heroku上部署后无法读取mongo数据库,返回503错误,但它在本地工作
jhipster - 将应用程序部署到 Heroku 后无法运行本地开发配置文件
Node.js 应用程序在本地主机上运行良好,但在 Heroku 上部署时显示错误