新手问题 一个很费解的问题

kitt · 2013年08月10日 · 最后由 kitt 回复于 2013年08月10日 · 4077 次阅读

问题:开发模式启动一切正常,同样代码和环境,生产模式启动后报这个错误: ActionView::Template::Error (Mysql2::Error: Table 'ebmyth.blogs' doesn't exist: SHOW FULL FIELDS FROM blogs):

这个表明明存在,rails c 里也都正常,开发环境也正常,唯独生产环境报这个错误 生产环境的 database 配置是从开发环境那里复制过去的,也没问题

直接登陆数据库看看。

都看过了没问题, | blog_sort | | city | | message | | message_receive | | message_send | | province | | schema_migrations | | session | | type | | user | | user_company | | user_info | +-------------------+ 21 rows in set (0.00 sec)

如果数据库真没这个表,开发环境早报错了

evelopment:
  adapter: mysql2
  encoding: utf8
  pool: 20
  reconnect: false
  host: localhost
  username: root
  password: 
  database: ebmyth

test:
  adapter: mysql2
  encoding: utf8
  pool: 20
  reconnect: false
  host: localhost
  username: root
  password: 
  database: ebmyth

production:
  adapter: mysql2
  encoding: utf8
  pool: 20
  reconnect: false
  host: localhost
  username: root
  password: 
  database: ebmyth

配置文件

RAILS_ENV=production rake db:migrate

#3 楼 @kitt 你应该发config/environments/production.rb的东西出来,还有就 Gemfile,应该和数据库配置文件没什么关系,这种事情我遇到过很多次,多数情况都是在config/environments/production.rb里面的问题。

Ebmyth::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb

  # Code is not reloaded between requests
  config.cache_classes = true

  # Full error reports are disabled and caching is turned on
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # Disable Rails's static asset server (Apache or nginx will already do this)
  config.serve_static_assets = false

  # Compress JavaScripts and CSS
  config.assets.compress = true

  # Don't fallback to assets pipeline if a precompiled asset is missed
  config.assets.compile = false

  # Generate digests for assets URLs
  config.assets.digest = true

  # Defaults to nil and saved in location specified by config.assets.prefix
  # config.assets.manifest = YOUR_PATH

  # Specifies the header that your server uses for sending files
  # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  # config.force_ssl = true

  # See everything in the log (default is :info)
  # config.log_level = :debug

  # Prepend all log lines with the following tags
  # config.log_tags = [ :subdomain, :uuid ]

  # Use a different logger for distributed setups
  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)

  # Use a different cache store in production
  # config.cache_store = :mem_cache_store

  # Enable serving of images, stylesheets, and JavaScripts from an asset server
  # config.action_controller.asset_host = "http://assets.example.com"

  # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
  # config.assets.precompile += %w( search.js )

  # Disable delivery errors, bad email addresses will be ignored
  # config.action_mailer.raise_delivery_errors = false

  # Enable threaded mode
  # config.threadsafe!

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation can not be found)
  config.i18n.fallbacks = true

  # Send deprecation notices to registered listeners
  config.active_support.deprecation = :notify

  # Log the query plan for queries taking more than this (works
  # with SQLite, MySQL, and PostgreSQL)
  # config.active_record.auto_explain_threshold_in_seconds = 0.5
end

生产模式的配置文件


source 'http://ruby.taobao.org/'
gem 'rails', '3.2.12'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'haml', '~> 3.0'
gem 'mysql2', '~> 0.3.11'
gem 'execjs'
gem 'therubyracer'
gem 'carrierwave'
gem 'passenger'

gem 配置文件

你可以这样,把 devlopment.rb 里面的内容复制到 production.rb 里面去。看看还出不出错,如果不出错肯定是 production.rb 的配置问题。

照做了,就是这个文件里的问题,可是我从新建项目到现在,这个文件我始终没动过啊

#9 楼 @kitt 这个文件默认本身问题的,如果有问题往往都是 Asset Pipeline 之类的问题。你肯定少做了一部,例如你有没有bundle exec rake assets:precompile RAILS_ENV=production

我觉得恐怕是这样的问题

http://guides.ruby-china.org/asset_pipeline.html

#10 楼 @metal 不会吧,assets 问题不会报 MySQL2 错误的。

我搜了一下,MySQL 本身就会出现这个问题。如果库里没数据,drop 掉重建看看。

我确实做这一部,但是静态文件我还是传统的放在 public 下的,没用用 rails 的 asset

也删除数据库重建了,也没用

好像还真是那里的问题,我把这句话注释掉就不报错了 config.cache_classes = true

静态文件怎么会联系到数据库去了呢

需要 登录 后方可回复, 如果你还没有账号请 注册新账号