生产环境错误

14

首先,我对Rails不太了解。我正在制作一个博客应用程序,当尝试在生产环境中运行它时,两种方法都出现了问题:

rails s -e production

RAILS_ENV=production

我遇到了相同的错误:

=> 启动 WEBrick => Rails 3.2.8 应用正在以生产模式启动,访问地址为 http://0.0.0.0:3000
=> 使用 -d 参数可以将进程转入后台
=> 使用 Ctrl-C 可以关闭服务器
退出
/home/loku/.rvm/gems/ruby-1.9.3-p286/gems/activerecord-> resolve_hash_connection': 数据库配置没有指定适配器 (ActiveRecord::AdapterNotSpecified)
...

我的设置:

ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]

Rails 3.2.8

数据库配置文件 database.yml:

development:    
  adapter: mysql2    
  encoding: utf8    
  reconnect: false    
  database: blogg_development    
  pool: 5    
  timeout: 5000    
  username: root    
  password: *** 
  host: localhost    

production:    
  adapter: mysql2       
  encoding: utf8    
  reconnect: false    
  database: blogg_production    
  pool: 5    
  timeout: 5000    
  username: root    
  password: ***    
  host: localhost

Gemfile:

source 'https://rubygems.org'
ruby '1.9.3'
gem 'rails', '3.2.8'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'mysql2'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
  gem 'haml-rails'
  gem 'less-rails'
  gem 'twitter-bootstrap-rails', :git => 'git://github.com/seyhunak/twitter-bootstrap-    rails.git'
  #gem 'actionpack', '~> 3.1.0'
end

gem 'jquery-rails'
gem 'haml'
gem 'devise'
gem 'cancan'

group :test, :development do
  gem 'guard-livereload'
  gem 'rb-fsevent'
  gem 'pry'
  gem 'pry-rails'
end

group :linux do
  gem 'libnotify'
end

group :darwin do
  gem 'rb-fsevent', require: false
  gem 'growl'
end

1
还有一个盲点:database.yml文件中的缩进?应该是一个制表符或两个空格,但要保持一致... - R Milushev
你们的生产服务器是什么? - user2473975
不相关,但是不要在生产环境中使用webbrick。 - Max Woolf
当您运行 bundle exec rake --trace db:migrate 时,您会收到什么错误? - Uri Mikhli
这在同一台开发机上工作吗?意思是 rails server 可以不指定环境而工作。 - Carlos Castellanos
显示剩余6条评论
6个回答

4
以下是需要考虑的事项:
  1. 确保Gemfile中有mysql2(已经存在)
  2. 在config/database.yml文件中定义生产环境(已经定义)。删除其他环境,只留下production。
  3. 确保缩进正确(我认为已经正确)
  4. 运行bundle install命令(确保gem已安装)
  5. 运行bundle show mysql2命令查看版本并确保已安装
  6. 运行bundle exec rails s -e production命令(一定要使用bundle exec)

  7. 如果仍然不起作用,可以查看config/environments/production.rb文件并确保没有任何异常设置。


2
根据来源,你所遇到的错误只有两种可能的解释。AdapterNotSpecified - 当连接未指定适配器(或配置文件config/database.yml 缺少适配器字段)时引发异常。
你是不是复制并粘贴了你的database.yml文件?如果是,你可能需要将其删除并重新从头开始输入。确保缩进一致。有时候复制和粘贴会连同一些被隐藏的字符一起复制,这些字符会被评估并导致代码出现问题。
希望能对你有所帮助。

1
  1. 你的Gemfile需要指定mysql gem。-- 算了,我现在看到它已经这样做了。
  2. 你需要指定db socket。它不总是在/tmp/mysql.sock中,有时它在/var...这取决于你安装mysql2的方式

    socket: /tmp/mysql.sock需要成为你的database.yml生产部分中的一行

例如:

production:    
  adapter: mysql2       
  encoding: utf8    
  reconnect: false    
  database: blogg_production    
  pool: 5    
  timeout: 5000    
  username: root    
  password: ***
  socket: /tmp/mysql.sock    
  host: localhost
  1. yml 在缩进方面很有趣。请仔细检查确保它是正确的。

1
你可能需要在Gemfile中添加一个production组,类似于以下内容:
group :production do
    gem 'mysql2'
end

从终端运行bundle install,然后尝试重新启动。

1
请务必认真考虑Rumen Milushev的建议:YAML对缩进非常敏感。
尝试完全删除production:部分,将development:重命名为production:,然后再次尝试。
如果可以正常工作,请使用yamllint.com等工具验证您的database.yml文件。

-2

你需要指定所有环境,你可能忘了测试,这很可能是错误发生的原因。


3
我相当确定那并不是实际情况。 - Max Woolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接