1

更新 - 已解决:我的本地服务器和 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

什么为我解决了它:

  • 通过运行重新安装了我的 ruby​​ 2.0.0rvm reinstall ruby 2.0.0
  • 运行bundle install #=> 当我看到“你的 Ruby 版本是 2.0.0,但你的 Gemfile 指定 1.8”时,我知道我的方向是正确的,因为这个错误非常普遍/遍布 StackOverFlow

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

相关和重要文件:

在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
4

4 回答 4

1

您仍然可以使用 sqlite 进行开发,您Gemfile应该如下所示:

group :development, :test do
  gem 'sqlite3'
end

group :production do
  gem 'pg'
end

这将使您可以postgresql在 Heroku(生产模式)和sqlite本地使用。不要忘记在 Heroku 上部署后立即运行数据库迁移。heroku run rake db:migrate您可以使用命令运行迁移。

于 2013-08-20T05:28:32.747 回答
1

看起来 Heroku 在部署时没有运行 db:migrate。

尝试运行

 #heroku run rake db:migrate

再次部署后在控制台上。

运行迁移后,您需要重新启动您的应用程序

#heroku restart 

重新加载架构并获取任何架构更改。

于 2013-08-20T03:56:34.383 回答
0

您将需要更改database.yml文件以反映新的adapter. 此外,您应该在本地设置 postgres。

database.yml文件应如下所示 -

发展:
  适配器:postgresql
  编码:utf8
  数据库:app_name_development
  游泳池:5
  用户名:
  密码:

测试:
  适配器:postgresql
  编码:utf8
  数据库:app_name_test
  游泳池:5
  用户名:
  密码:

生产:
  适配器:postgresql
  编码:utf8
  数据库:app_name_production
  游泳池:5
  用户名:
  密码:

修改database.yml运行后

rake db:drop db:create db:migrate

在 Postgres 中创建新的数据库。

于 2013-08-20T05:34:37.807 回答
0

您可以在本地使用与生产中不同的适配器,这没问题。部署到 Heroku 时,您需要手动运行迁移,这不是部署过程的一部分。

因此,您首先定期部署它,然后运行heroku run rake --trace db:migrate​​. 您看到的错误告诉您 Collection 模型的表不存在。

于 2013-08-20T06:02:38.030 回答