• #14 楼 @lolychee 用了这个办法。十分感谢!

  • 可能是最酷的 github-page at 2013年03月03日

    相当好!!!明天上班开始学!!

  • #18 楼 @huacnlee 试了一下,验证码很好很漂亮,但…… 我怎么判断提交过来的值对不对呢……

    找到了验证的方法:

    if captcha_valid?(params[:captcha])
        p "~~~~~~~~~~~~~~~~~~~~"
    end
    

    但有一个奇怪的问题,就是这个验证老是不对,后来开 Firebug 查了一下,发现 它会一次产生两个码,生效的是我看不见的这个 (标 2 的那个) 我的 html.erb 文件如下:

    <h1>Login111#login</h1>
    <p>Find me in app/views/login/login.html.erb</p>
    <form>
        <p><%= captcha_tag %></p>
        <p><%= text_field_tag :captcha %></p>
        <p><%= submit_tag 'Validate' %></p>
    </form>
    

    controller 就没什么了:

    class LoginController < ApplicationController
        def login
            if captcha_valid?(params[:captcha])
                p "~~~~~~~~~~~~~~~~~~~~"
            end
        end
    end
    

    跪求解……

  • #14 楼 @lgn21st 嘿嘿,反正就是一通乱蒙嘛,也亏得楼里各位的提点,大概差不多对 helo 有个概念了。 另外不解的是,用同样的方法去“调试”已经成功的那些个邮箱,居然都不让我 auth login,直接给我踢出了 telnet……免费邮箱和收费邮箱的区别么……

  • 终于搞定了! 起因是 263 客服问我要报错信息……我一楞,这没有报错信息啊,就是不成功啊。于是去 google,找到了这个: http://api.rubyonrails.org/classes/ActionMailer/Base.html raise_delivery_errors - Whether or not errors should be raised if the email fails to be delivered. 这不就是报错信息么?于是加上:

    ActionMailer::Base.smtp_settings = {
        #略
    }
    ActionMailer::Base.raise_delivery_errors = true
    

    运行,果然有报错了,是 Net::SMTPAuthenticationError: 535 Error: authentication failed 这就好办了,我们来找什么是 535……其实也不用找,就是认证失败嘛=_= 然后看到这句: :domain - If you need to specify a HELO domain, you can do it here. 我的 domain 写的是 etsc-tech.com,也就是我们公司域名,但我记得那天用 telnet 调试的时候不是这个结果,果断弄出 telnet 再试:

    helo a
    250 263.net
    

    果然就应该是这个吧!先改,再试,但……依然不成。还是看 API :authentication - If your mail server requires authentication, you need to specify the authentication type here. This is a symbol and one of :plain (will send the password in the clear), :login (will send password Base64 encoded) or :cram_md5 (combines a Challenge/Response mechanism to exchange information and a cryptographic Message Digest 5 algorithm to hash important information)

    几种认证方式:plain,直接传递;login,Base64 码传递;cram_md5,md5 加密传递 那天的教程里我记得是 Base64 过的,于是先在 telnet 里试,用户名 terry,密码 xxxxx……同样 535 错误!又看那天的 telnet 教程,原来用户名也不应该是我的用户名,而是 [email protected] 这样的全名(这就是所有企业邮箱都失败的原因所在吧!) 改正后在 telnet 里调试,通过。 然后在 Rails 配置里写,通过! 完整代码:

    ActionMailer::Base.smtp_settings = {
        :address              => "smtpcom.263xmail.com",#263提供的
        :port                 => 25,#同上
        :domain               => "263.net",#263的客服说用我们公司的域名,其实他们乱说的,应该是在telnet里helo出来的那个域名
        :user_name            => "[email protected]",#上面不用我们公司的域名了,所以这里要加上,因为是企业邮箱嘛
        :password             => "password",
        :authentication       => "login"#三种方式上面有解释
    }
    ActionMailer::Base.raise_delivery_errors = true#这个调试完倒是可以不要了……
    

    打完收工…… 附一个更详细的 telnet 发邮件步骤: http://www.wikihow.com/Send-Email-Using-Telnet

  • 如何调试 ActionMailer at 2013年02月28日

    和 LZ 类似,QQ 免费 163 免费 gmail 免费都无问题,263 企业邮箱发不出去……莫非是企业邮箱就不行咩…………

  • 好吧,是怎么执行起来的我还真不知道……似乎是重启服务似乎又不是,反正现在它正在连续发邮件中…… 关键是我理解错误,这个脚本写完后是不用“执行”的,因为这个是直接写进系统的 crontab 里了,系统自己会执行之。

  • 我也是跟 LZ 类似的问题:

    schedule.rb 里我是这么写的:

    set :environment, :development
    
    every 1.minutes do
        rake "terry:mail_test"
    end
    

    然后 terry.rake 文件是:

    #encoding: UTF-8
    
    namespace :terry do
        desc '发邮件测试'
        task :mail_test => :environment do
            UserMailer.welcome_email(User.find(1)).deliver
            puts "XXX"
        end
    end
    

    单独在命令行里执行rake "terry:mail_test"是没问题的,邮件收到,但我执行 whenever 就报这个:

    terry@TerryUbuntu:~/RubymineProjects/EIMV5$ whenever
    * * * * * /bin/bash -l -c 'cd /home/terry/RubymineProjects/EIMV5 && RAILS_ENV=development bundle exec rake terry:mail_test --silent'
    
    ## [message] Above is your schedule file converted to cron syntax; your crontab file was not updated.
    ## [message] Run `whenever --help' for more options.
    terry@TerryUbuntu:~/RubymineProjects/EIMV5$ 
    

    我哪怕执行了一个whenever --update-crontab也不行。求解……

  • #16 楼 @diudiutang 借地方问问,如何限制发送频率呢?比如我发完一封邮件后等 20 秒,真的用 sleep 20 吗?

  • ActionMailer::Base.smtp_settings = {
        :address              => "smtp.gmail.com",
        :port                 => 587,
        :domain               => 'gmail.com',
        :user_name            => 'username',
        :password             => 'password',
        :authentication       => 'plain',
        :enable_starttls_auto => true
    }
    

    这是 Gmail 的,也成了。决定再跟 263 的技术客服沟通一下…………

  • ActionMailer::Base.smtp_settings = {
        :address              => "smtp.qq.com",
        :port                 => 25,
        :domain               => "qq.com",
        :user_name            => "username",
        :password             => "password",
        :authentication       => "plain"
    }
    

    QQ 的这么试无误,关键是不能要 :enable_starttls_auto => true 这句,true false 都不要,根本不要这句……

    可是 263 的还是不成…………

  • ActionMailer::Base.smtp_settings = {
        :address              => "smtp.qq.com",
        :port                 => 25,
        :domain               => "qq.com",
        :user_name            => "username",
        :password             => "password",
        :authentication       => "plain"
    }
    

    QQ 的这么试也成了,关键是不能要 :enable_starttls_auto => true 这句,true false 都不要,根本不要这句……

    还真不是这句的原因。我用我的 QQ 号试,加上了这句话,成功了,但用另外一个 QQ 号试就不成,无论有没有这句话都不成……这还有什么花巧么……………………

    原来是 QQ 邮件的设置,一个开通了 POP3/SMTP服务 和 IMAP/SMTP服务 这两项,就不行,另外一个只开通了 POP3/SMTP服务 这一项,就成功了。

    可是 263 的还是不成…………

  • 在家又试了试这个http://www.kongtechnology.com/2008/01/27/smtp-authentication-and-send-emails-using-telnet/ 成功发送。 是不是说我能用 telnet 这么发邮件,就说明我可以用 Rails 发呢? 我在它的这个步骤里 login 了,所以我也必须把 :authentication => "plain" 设置成 login 对吗? 家里没 Rails,明天去公司试。权当备忘了……

  • #3 楼 @ericguo telnet 鼓捣了半天,最后的结果都是 598 错误,包括 163 的我本来成功的收发地址也是……是我没弄对吗?

  • #2 楼 @windxj 我直接在命令行里执行的,Log 信息就是一个对象,还怎么看呢…… #3 楼 @ericguo 好的,我明天去公司学习一下,先谢过了……

  • 呃,提供一个企业邮箱的测试账号吧:

    :domain               => "etsc-tech.com",#这个问过263的人,说就是写我们公司的域名
    :user_name            => "test",
    :password             => "1234qwerQWER",
    

    web 方式登录邮箱查看已发邮件用 www.263.net,然后用户名 [email protected],密码如上,不勾“安全登录” 哪位大侠能帮我看看不……

  • appfog 真给力呀 at 2012年12月09日

    现在是 MySQL 开通不了,报错如下: name: VmcError, endpoint: POST:/services, statusCode: 502, code: 503, description: Unexpected response from service gateway

  • 最近投奔了 RubyMine,确实很好用,各种补全用着很舒服,一些小功能也不错:多剪贴板、生成模型结构图、快速导航等等

  • 装倒是没啥大问题,但貌似不能输入中文有点变态……

  • 求教程……

  • #24 楼 @ayang23 我也体会到这种痛苦了……虚拟机下面可以输入,双系统反而不能了………………

  • 同建议新建 migration,将 schema 的内容拷进去。

    然后再怎么迁移 schema 文件呢?

  • #19 楼 @zmbacker 期待中……

  • 好难看的 end at 2012年08月06日

    求靠谱 Ruby 缩进工具……

  • 新手请教 rails 定时器问题 at 2012年08月01日

    #12 楼 @jimrokliu 嗯,昨天发了帖之后就自己搜到了这个,和另外一个 resque-schedule,看起来都不错,试试去。

  • #7 楼 @jimrokliu 我实在是太愚钝了,想自己加一个“departments_users”,写了半天也没成功,说我关联太复杂……

    class User < ActiveRecord::Base  
      #作为用户所属的部门们  
      has_many :departments_users  
      has_many :departments, :through => :departments_users  
    
      #作为用户的部门经理们
      has_many :departments_managers,:through => :departments
    
      #作为经理管辖的用户们,不过似乎不是这么写的=_=
      has_many :departments_users, :through => :departments
    end
    
    class Department < ActiveRecord::Base  
      #部门的用户们  
      has_many :departments_users  
      has_many :users, :through => :departments_users, :source => :user
    
      #部门的经理们  
      has_many :departments_managers  
      has_many :managers, :through => :departments_managers, :source => :user  
    end
    
    class DepartmentsManager < ActiveRecord::Base  
      belongs_to :department  
      belongs_to :user  
    end  
    
    class DepartmentsUser < ActiveRecord::Base  
      belongs_to :department  
      belongs_to :user  
    end
    

    然后报错:

    [1] pry(main)> u=User.find(2)
    => #<User id: 2, reg_name: "marian", name: "王小丽", name_en: "Marian Wang", email: "[email protected]", hashed_password: nil, salt: nil, status: 1, extension: "814", mobile: nil, qq: nil, msn: nil, created_at: "2012-07-28 04:01:17", updated_at: "2012-07-28 04:01:17">
    [2] pry(main)> u.departments_managers
    SystemStackError: stack level too deep
    from /home/terry/.rvm/gems/ruby-1.9.3-p194/gems/pry-0.9.9.6/lib/pry/pry_instance.rb:249
    

    不能两个关联 through 同一个类吗?这个 through 和 source,哪里有详细的讲解啊,实在是不懂了……

  • 新手请教 rails 定时器问题 at 2012年07月31日

    要真的 Rails 轮询应该怎么弄呢?比如每到周一就发邮件

  • #7 楼 @jimrokliu 确实可行,虽然数据取出来是 [1,3,3,5] 这样子的……我 uniq 一下好了。我再仔细琢磨琢磨原理,大感谢!

  • #5 楼 @xds2000 呃,你说对了……有办法解决吗………………

  • #3 楼 @jimrokliu 不行啊老大,报错:

    [1] pry(main)> u=User.find(2)
    => #<User id: 2, reg_name: "marian", name: "王小丽", name_en: "Marian Wang", email: "[email protected]", hashed_password: nil, salt: nil, status: 1, extension: "814", mobile: nil, qq: nil, msn: nil, created_at: "2012-07-28 04:01:17", updated_at: "2012-07-28 04:01:17">
    [2] pry(main)> u.directs
    ActiveRecord::HasManyThroughSourceAssociationNotFoundError: Could not find the source association(s) :user in model Department. Try 'has_many :directs, :through => :departments, :source => <name>'. Is it one of :departments_users, :users, :departments_managers, or :managers?
    from /home/terry/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.0/lib/active_record/reflection.rb:509:in `check_validity!'