铁路乘客部署 - 找不到表'用户'

时间:2015-08-29 10:50:49

标签: ruby-on-rails ruby nginx passenger

我做了passengers's offical tutorial没有错误。我从git中提取代码并使用此命令

bundle install --deployment --without development test
bundle exec rake assets:precompile db:migrate

我的database.yml

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  adapter: sqlite3
  database: db/production.sqlite3

日志/ production.log:

I, [2015-08-28T15:54:47.310372 #32086]  INFO -- : Started GET "/" for 176.219.167.108 at 2015-08-28 15:54:47 -0400
I, [2015-08-28T15:54:47.334003 #32086]  INFO -- : Processing by ArticlesController#index as HTML
I, [2015-08-28T15:54:47.365923 #32086]  INFO -- : Completed 500 Internal Server Error in 31ms (ActiveRecord: 0.9ms)
F, [2015-08-28T15:54:47.367834 #32086] FATAL -- :
ActiveRecord::StatementInvalid (Could not find table 'users'):
  app/models/ability.rb:5:in `initialize'

我在rails console上使用此命令检查了我的用户表

ActiveRecord::Base.connection.tables
不过,我为用户使用了devise gem。 我绝对是关于rails的初学者,我希望我写的信息足以让你理解问题。

和我的服务器信息:Digital Ocean 5 $ Droplet。 Ubuntu 14.04。 Nginx,passenger,rvm,ruby 2.2.2。

和我的500页:image

1 个答案:

答案 0 :(得分:1)

您应该只需运行以下内容即可解决此问题:

RAILS_ENV=production bundle exec rake db:migrate

但是,我建议您不要在生产中使用SQLite,因为这种类型的数据库最适合测试和开发。您可能希望研究使用PostgreSQL。以下内容适用于您:

在您的 Gemfile 中,添加:

gem 'pg', :group => :production

运行bundle install。 然后在 database.yml 中使用:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 10
  timeout: 5000

login: &login
  username: <%= ENV['DATABASE_USER'] %>
  password: <%= ENV['DATABASE_PASS'] %>

production:
  <<: *default
  <<: *login
  database: your_database_name

出于安全考虑,最好不要在Rails应用程序的文件中以明文形式编写数据库用户名和密码。将它们设置为环境变量要好得多。为此,请编辑Droplet上的〜/ .bash_profile 文件并添加以下内容:

export DATABASE_USER=your_username
export DATABASE_PASS=your_password

退出该文件并从命令行运行source ~/.bash_profile以将这些新设置加载到内存中。

然后,您需要创建PostgreSQL数据库,其中有plenty of guides online

完成后,您将需要在生产中运行迁移时运行适用于SQLite的相同命令:

RAILS_ENV=production bundle exec rake db:migrate

希望这有帮助!