Rails 应用程序部署挑战,在 production.log 中找不到数据库表

Rails 应用程序部署挑战,在 production.log 中找不到数据库表

我正在尝试设置密码推送器这是我的第一个 ruby​​ 应用程序。按照 README 中的说明构建和运行 webrick 服务器运行正常。

仅当我尝试添加 Apache ProxyPass 和 ProxyPassReverse 时,页面加载速度才会减慢到几分钟。

所以我尝试了 mod_passenger,但现在它无法找到密码表。这是我在 log/production.log 中得到的结果。

Started GET "/" for 10.10.2.13 at Sun Jun 10 08:07:19 +0200 2012
  Processing by PasswordsController#new as HTML
Completed 500 Internal Server Error in 1ms

ActiveRecord::StatementInvalid (Could not find table 'passwords'):
  app/controllers/passwords_controller.rb:77:in `new'
  app/controllers/passwords_controller.rb:77:in `new'

在 log/private.log 中,我得到了更多输出,因此这里只是一个片段,但在我看来它正在与数据库一起工作。编辑:这实际上是旧的日志输出,可能来自 db:create。

Migrating to AddUserToPassword (20120220172426)
   (0.3ms)  ALTER TABLE "passwords" ADD "user_id" integer
   (0.0ms)  PRAGMA index_list("passwords")
   (0.2ms)  CREATE INDEX "index_passwords_on_user_id" ON "passwords" ("user_id")
   (0.7ms)  INSERT INTO "schema_migrations" ("version") VALUES ('20120220172426')
   (0.1ms)  select sqlite_version(*)
   (0.1ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" 
   (0.0ms)  PRAGMA index_list("passwords")
   (0.0ms)  PRAGMA index_info('index_passwords_on_user_id')
   (4.6ms)  PRAGMA index_list("rails_admin_histories")
   (0.0ms)  PRAGMA index_info('index_rails_admin_histories')
   (0.0ms)  PRAGMA index_list("users")
   (4.8ms)  PRAGMA index_info('index_users_on_unlock_token')
   (0.0ms)  PRAGMA index_info('index_users_on_reset_password_token')
   (0.0ms)  PRAGMA index_info('index_users_on_email')
   (0.0ms)  PRAGMA index_list("views")

在我的 vhost 中我将其设置为使用 RailsEnv private。

<VirtualHost *:80>
#  ProxyPreserveHost on
#
#  ProxyPass / http://10.220.100.209:180/
#  ProxyPassReverse / http://10.220.100.209:180/
  DocumentRoot /var/www/pwpusher/public
  <Directory /var/www/pwpusher/public>
    allow from all
    Options -MultiViews
  </Directory>
  RailsEnv private

  ServerName pwpush.intranet

  ErrorLog /var/log/apache2/error.log
  LogLevel debug
  CustomLog /var/log/apache2/access.log combined
</VirtualHost>

我的 mods-enabled 中的 Passenger.conf 是 Debian 的默认设置。

<IfModule mod_passenger.c>
  PassengerRoot /usr
  PassengerRuby /usr/bin/ruby
</IfModule>

在 apache error.log 中我发现了一些对我来说更加神秘的东西。

[Sun Jun 10 06:25:07 2012] [notice] Apache/2.2.16 (Debian) Phusion_Passenger/2.2.11 PHP/5.3.3-7+squeeze9 with Suhosin-Patch mod_ssl/2.2.16 OpenSSL/0.9.8o configured -- resuming normal operations
/var/www/pwpusher/vendor/bundle/ruby/1.8/bundler/gems/modernizr-rails-09e9e6a92d67/lib/modernizr/rails/version.rb:3: warning: already initialized constant VERSION
cache: [GET /] miss
[Sun Jun 10 08:07:19 2012] [debug] mod_deflate.c(615): [client 10.10.2.13] Zlib: Compressed 728 to 423 : URL /
/var/www/pwpusher/vendor/bundle/ruby/1.8/bundler/gems/modernizr-rails-09e9e6a92d67/lib/modernizr/rails/version.rb:3: warning: already initialized constant VERSION
cache: [GET /] miss
[Sun Jun 10 10:17:16 2012] [debug] mod_deflate.c(615): [client 10.10.2.13] Zlib: Compressed 728 to 423 : URL /

也许这是例行公事。我可以看到 rake 命令在相对应用程序根目录 db/ 中创建文件。我有 private.sqlite3、production.sqlite3 等。这是我的 config/database.yml。

base: &base
  adapter: sqlite3
  timeout: 5000

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

test:
  database: db/test.sqlite3
  <<: *base

private:
  database: db/private.sqlite3
  <<: *base

production:
  database: db/production.sqlite3
  <<: *base

我尝试在其中设置绝对路径,但没有帮助。

答案1

您的配置看起来有效,并且与我为 Passwordpusher @ pwpush.com 运行的配置类似。

确保在适当的环境下运行 db:create/db:migrate rake 任务:

RAILS_ENV=private bundle exec rake db:create db:migrate

不提供 RAILS_ENV 部分将导致 rake 使用默认值“development”。

为了验证,请确保 db/private.sqlite3 在操作系统中已创建且时间戳正确。

如果这仍然不起作用,请在此处提交问题,我会帮助您(我是 PasswordPusher 的作者):https://github.com/pglombardo/PasswordPusher/issues

相关内容