DelayedJob: “Job failed to load: uninitialized constant Syck::Syck”

梦想与她 提交于 2020-01-06 04:24:46

问题


I am using Ruby on Rails 3.1 and the DelayedJob gem. I have a Contact Us form through which people can contact me. When I submit that I get the following error

`last_error` = '{Job failed to load: uninitialized constant Syck::Syck. Handler: \"--- !ruby/struct:Delayed::PerformableMailer ...

However, I have also others forms that send e-mails (eg: Sign Up and Sign In users) and those work as expected. The only problem seems to occur with the Contact Us form.

I read others related problem posts but I still cannot make that to work... how can I solve the problem?

P.S.: It seems that before upgrading to Rails 3.1 it worked.


UPDATE for @Shaun

Now my 'boot.rb' file is

require 'rubygems'
require 'yaml'
YAML::ENGINE.yamler= 'syck'

# Set up gems listed in the Gemfile.
gemfile = File.expand_path('../../Gemfile', __FILE__)
begin
  ENV['BUNDLE_GEMFILE'] = gemfile
  require 'bundler'
  Bundler.setup
rescue Bundler::GemNotFound => e
  STDERR.puts e.message
  STDERR.puts "Try running `bundle install`."
  exit!
end if File.exist?(gemfile)

After requiring yaml I get this error (note: Syck::Syck::BadAlias is "a new"\"different from the previous" error):

{Job failed to load: uninitialized constant Syck::Syck::BadAlias. Handler: \"--- !ruby/struct:Delayed::PerformableMailer ...

My 'database.yml' file is:

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: app_name_development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: app_name_test
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: app_name_production
  pool: 5
  username: root
  password: *******
  socket: /var/run/mysqld/mysqld.sock

UPDATE for @KensoDev

My 'Gemfile' file is:

source 'http://rubygems.org'

gem 'rails', '3.1.0'
gem 'rake'

gem 'mysql2'
gem 'paperclip',       '~> 2.3'
gem 'will_paginate',   '~> 3.0.pre2'
gem 'delayed_job'
gem 'memcache-client', '1.8.5'

group :assets do
  gem 'sass-rails',   '~> 3.1.0'
  gem 'coffee-rails', '~> 3.1.0'
  gem 'uglifier'
end

gem 'jquery-rails'

gem 'capistrano'

gem "rdoc", "~> 3.6.1"

group :test do
  # Pretty printed test output
  gem 'turn', :require => false
end

ADDITIONAL INFORMATION

At this time, in order to call the delivering method, I use the following code:

::Pages::Mailer.delay.contact_us(@user)   # It doesn't work and doesn't send the e-mail

On the other hand, if I use the following code:

# Note: It doesn't have the '::' at the beginning
Pages::Mailer.delay.contact_us(@user)     # It doesn't work and raise the 'NameError' (described below)

I get this error:

NameError (uninitialized constant ActionController::Caching::Pages::Mailer)

The same happens if I use the "not delayed" version:

::Pages::Mailer.contact_us(@user).deliver # It works and SENDS THE E-MAIL!!!
Pages::Mailer.contact_us(@user).deliver   # It doesn't work and raise the 'NameError'

回答1:


I wrote a post about it.

http://www.kensodev.com/2011/08/16/uninitialized-constant-sycksyck-nameerror/




回答2:


Syck is a Yaml parser, so maybe you have an error in one of your Yaml files? Locale files or your database.yml are good bets.

Failing that, make sure that the yaml parser is using the correct yamler by adding the following to boot.rb:

require 'yaml'
YAML::ENGINE.yamler= 'syck'


来源:https://stackoverflow.com/questions/7496779/delayedjob-job-failed-to-load-uninitialized-constant-sycksyck

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!