我使用postgresql在debian服务器上部署我的第一个railsapp。
Rails 3.2.9 Ruby 1.9.3-p327 第0.14.1页
部署后,当我做
时 bundle exec rake db:reset
失败并出现以下错误:
/var/www/opf/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.9/lib/active_record/connection_adapters/postgresql_adapter.rb:1208: [BUG] Segmentation fault
以及一长串错误消息。
虽然我的database.yml在我的开发工作中正常工作:
我无法找到postgresql_adapter导致错误的原因。
---更新
如果我输入的数据库名称,用户名和密码不正确,结果是一样的。 我使用psql my_db my_user测试了数据库连接,它可以工作。 如果我做了
bundle exec rake db:reset RAILS_ENV=production
我收到了一个错误:
undefined method `sass' for #<Rails::Application::Configuration:0x00000000dea738>
虽然 sass ,但我的/ var / www / opf / shared / bundle /中存在 sass-rails 和 haml-rails gem红宝石/ 1.9.1 /宝石
======更新=======
这是我的database.yml:
development:
host: localhost
port: 5432
adapter: postgresql
encoding: utf8
database: mydevdb
pool: 5
username: myuser
password: mypass
test:
host: localhost
port: 5432
adapter: postgresql
encoding: utf8
database: mytestdb
pool: 5
username: myuser
password: mypass
production:
host: localhost
port: 5432
adapter: postgresql
encoding: utf8
database: myproddb
pool: 5
username: myuser
password: mypass
这是我的Gemfile:
source 'https://rubygems.org'
gem 'rails', '~>3.2'
# Ressource : https://github.com/ged/ruby-pg
gem 'pg', '>= 0.14'
# https://github.com/indirect/haml-rails
gem 'haml-rails', '~> 0.3'
group :developpement do
# Ressource : https://github.com/rspec/rspec-rails
gem 'rspec-rails', '>= 2.11'
# Ressource : https://rvm.io//integration/capistrano/
gem 'capistrano', '>= 2.12'
# Ressource : https://github.com/btelles/faker
gem 'faker', '>= 1.0'
# Ressource : https://rvm.io//integration/capistrano/
gem 'rvm-capistrano'
end
group :test do
gem 'rspec', '>= 2.11'
gem 'webrat', '>= 0.7'
gem 'spork-rails', '>= 3.2'
gem 'factory_girl_rails', '>= 4.0'
end
group :assets do
# Faciliter la rédaction de feuilles de style CSS
# Ressource : http://sass-lang.com/
gem 'sass-rails', '>= 3.2.3'
gem 'coffee-rails', '>= 3.2.1'
# Ressource : http://compass-style.org/
gem 'compass-rails', '>= 1.0'
# See https://github.com/sstephenson/execjs
#readme for more supported runtimesa
# execjs and therubyracer are ncessary for compass-rails gem to work properly
gem 'execjs'
gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
# Ressource : https://github.com/ctran/annotate_models
gem 'annotate'
# Ressource : https://github.com/asanghi/excel_rails
gem 'excel_rails', '~> 0.3'
# Ressource : https://github.com/voraz/spreadsheet
gem 'spreadsheet', '~> 0.7'
# Ressource : https://github.com/lomba/schema_plus
gem 'schema_plus', '~> 0.4'
# Resource : https://github.com/tchandy/octopus
gem 'ar-octopus', '~> 0.3'
# Resource : https://github.com/ernie/squeel
gem 'squeel', '~> 1.0'
# Resource : https://github.com/plataformatec/devise
gem 'devise', '~> 2.1'
# Resource : https://github.com/martinrehfeld/role_model
gem 'role_model'
# Resource : https://github.com/stffn/declarative_authorization
gem 'declarative_authorization'
# Resource : https://github.com/francesc/rails-translate-routes
gem 'rails-translate-routes', '~> 0.1'
我做了更多测试,并意识到问题来自初始化过程。 在某些时候,我的应用程序的初始化使Ruby解释器崩溃。 我删除了我的config / application.rb的一些行。结果至少是将崩溃变成了一个关于&#34;单元化恒定设计&#34;的错误。我用谷歌搜索,发现我添加了一个&#34;要求&#39;设计&#39;&#34;在我的application.rb中。所以我做了,但错误和Ruby崩溃又来了。
问题似乎与资产管道和初始化有关。 我注意到以下行使我的Initialization崩溃了Ruby解释器,所以我对它进行了评论:
Bundler.require(*Rails.groups(:assets => %w(development test)))
我的config / application.rb:
require File.expand_path('../boot', __FILE__)
# Pick the frameworks you want:
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"
# require "rails/test_unit/railtie"
# Without this I got a "unitialized Constant Devise" error
require 'devise'
# THIS ALL STUFF MAKES CRASH RAILS INITIALIZATION, so I commented it.
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
#Bundler.require(*Rails.groups(:assets => %w(development test)))
# If you want your assets lazily compiled in production, use this line
# Bundler.require(:default, :assets, Rails.env)
end
module Opf
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
# Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named.
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
# Activate observers that should always be running.
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# Pour utiliser la traduction française des messages d'erreur standards
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = 'fr'
# Configure the default encoding used in templates for Ruby 1.9.
config.encoding = "utf-8"
# Configure sensitive parameters which will be filtered from the log file.
config.filter_parameters += [:password]
# Enable escaping HTML in JSON.
config.active_support.escape_html_entities_in_json = true
# Use SQL instead of Active Record's schema dumper when creating the database.
# This is necessary if your schema can't be completely dumped by the schema dumper,
# like if you have constraints or database-specific column types
config.active_record.schema_format = :sql
# Enforce whitelist mode for mass assignment.
# This will create an empty whitelist of attributes available for mass-assignment for all models
# in your app. As such, your models will need to explicitly whitelist or blacklist accessible
# parameters by using an attr_accessible or attr_protected declaration.
config.active_record.whitelist_attributes = true
# Enable the asset pipeline
config.assets.enabled = true
# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0'
# ======= DEBUG : without this, Capistrano Assets:precompile crash ========
config.assets.initialize_on_precompile = false
# ==============================================================
# Make crashing Initialization, so I commented
# config.generators do |g|
# g.test_framework :rspec
# g.fixture_replacement :factory_girl
# g.stylesheets false
# cette option ne doit pas être activée car elle est géré (et activée) par la gem 'haml-rails'
# # g.template-engine :haml
# end
# config.sass.preferred_syntax = :sass
# To replace 'div' by 'span' within error-feedbacks
config.action_view.field_error_proc = Proc.new do |html_tag, instance|
# Ressources : http://stackoverflow.com/questions/5267998/rails-3-field-with-errors-wrapper-changes-the-page-appearance-how-to-avoid-t
# Ressources : Railcast : http://railscasts.com/episodes/39-customize-field-error?autoplay=true
class_attr_index = html_tag.index('class="')
if class_attr_index
html_tag.insert class_attr_index+7, 'field_with_errors '
else
html_tag.insert html_tag.index('>'), ' class="field_with_errors"'
end
end
end
end
myapp成功测试摘要:
答案 0 :(得分:0)
在经过一些非常低调的研究和测试后,我找到了问题的原因。
有几个错误:
为了使execjs gem正常工作,
gem 'therubyracer', :platforms => :ruby
必须位于生产组或Gemfile
中的任何组之外为了预先编译嵌套的SASS-CSS资产(rake assets:precompile
),必须在app / assets / stylesheets / application.css.sass(我的顶部)删除清单(注释) '使用sass-rails和haml-rails gems),和I had to add the line:
@import screen.css.sass
在我的app / assets / stylesheets / application.css.sass文件中。
为了使捆绑工作正常,我在“gem install bundler”中收到一条消息,在我的/ etc / profile和服务器端的/root/.bashrc文件中添加$PATH:
。
为了使capistrano部署:更新任务正常运行,不要忘记在config / deploy.rb文件中添加require 'rvm/capistrano'
,以便capistrano可以找到(并执行)bundle
命令。 / p>
但是对于所有这些修复,我仍然遇到与postgresql相同的错误:
/var/www/opf/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.9/lib/active_record/connection_adapters/postgresql_adapter.rb:1208: [BUG] Segmentation fault
因为我正在使用这个特殊的recipe以避免在github上存储database.yml。 并使用此solution按顺序capistrano找到我的食谱文件。 我为这个食谱构建了一个database.yml模板,但不知怎的,我意识到这个问题来自我的模板。
我必须删除每个数据库上的这两行,以便导轨初始化正常工作:
host: localhost
port: 5432
可能结果database.yml已损坏,我没有测试重新添加这些(更正)两行。我已经花了几周时间......
---一般建议---
现在,我向那些寻找解决方案的开发人员提供一些建议(就像我一样):在寻找解决方案之后公平地停止它。
使用rails new newapp --database=postgresql
构建一个新的非常基本的rails应用程序(使用rails new -h
获取有关此命令的数据库参数的帮助),然后使用rails generate scaffold mymodel mycolumn
生成一个简单的支架。
在您的应用程序目录中,使用git init
初始化Git,使用capify .
初始化Capistrano
然后只需为您的数据库添加gem(pg,例如postgresql),运行bundle install。
然后使用您自己的基本database.yml将其连接到您的数据库,让您测试它是否适用于您的开发工作站。
提交并推送到您的Git存储库,然后使用capistrano进行部署并检查它是否在服务器端工作。
然后逐步添加(gems,migrations和你自己的个人lib)到你的newapp,直到它不起作用。
并行地将newapp工作的位添加到服务器端的失败应用程序,直到它正常工作(不要在开发工作站端更改应用程序上的任何内容)。
这会让你迟早会找到解决方案。