在我的rails应用程序的bin文件夹中,我有一个脚本来轮询任何接收到的邮件的gmail帐户收件箱,但是这一行imap = Net::IMAP.new(config:host,config:port,true)失败了,没有隐式的
这是脚本的一种简化形式。
#bin/mail_receiver.rb
require File.join(File.dirname(File.expand_path(__FILE__)), '..', 'config', 'environment')
require 'net/imap'
require 'net/http'
require 'rubygems'
config = File.expand_path('../../config/initializers/load_imap_settings', __FILE__)
imap = Net::IMAP.new(config[:host], config[:port], true)my_settings.yml是在其他rails配置之前在application.rb中加载的,我已经在控制台中确认它们是可用的。
#config/my_settings.yml
IMAP_HOST: 'imap.gmail.com'
IMAP_PORT: '993'
IMAP_USERNAME: 'xxxvvvyyy@gmail.com'
IMAP_PASSWORD: 'xxxvvvyyy'然后,我让它在初始化器中可用,以便在前面粘贴的mail_receiver.rb脚本中使用。
#config/initializers/load_imap_settings.rb
ImapSettings = {
host: ENV['IMAP_HOST'],
port: ENV['IMAP_PORT'],
username: ENV['IMAP_USERNAME'],
password: ENV['IMAP_PASSWORD']
}在rails控制台中,我可以
config = ImapSettings
config[:host]这会回来的
'imap.gmail.com'类似地,port配置:端口、config:username或config:password都在rails控制台中返回正确的值,没有错误。
发布于 2013-09-19 14:09:29
bin/mail_receiver.rb中的File.expand_path返回一串路径。此字符串分配给config变量,当您调用config[:host]或config[:port] ruby时,会引发一个错误no implicit conversion of Symbol into Integer (TypeError),因为它预期对于String (在[]内)应该是一个整数,或者范围,等等(您可以在那里看到文档http://ruby-doc.org/core-2.0.0/String.html#method-i-5B-5D)。
您应该通过config/initializers/load_imap_settings.rb通过require_relative加载您的配置,然后将参数ImapSettings的哈希分配给confing变量。您的代码(在bin/mail_receiver.rb)中)可能如下所示:
require_relative '../../config/initializers/load_imap_settings'
config = ImapSettings
imap = Net::IMAP.new(config[:host], config[:port], true)https://stackoverflow.com/questions/18892457
复制相似问题