我使用Travis CI作为宝石我正在开发并遇到一个奇怪的错误(链接在问题的最后)。
gem正在存储一些使用YAML序列化的信息,这些信息不是手动构建的,而是使用YAML.dump
然后再次使用YAML.load
加载。
以下行用于从/向YAML转储和加载哈希:
headers[:ar_mailer_settings] = YAML.dump(settings)
...
ar_settings = YAML.load(mail['ar_mailer_settings'].value)
后一行似乎在Travis CI上产生错误,但是当我使用相同的二进制版本在本地运行测试时,一切都运行得很好:
Psych::SyntaxError: (<unknown>): mapping values are not allowed in this context at line 1 column 22
/home/travis/.rvm/rubies/ruby-2.0.0-p576/lib/ruby/2.0.0/psych.rb:205:in `parse'
...
/home/travis/build/Stex/ar_mailer_revised/lib/action_mailer/ar_mailer.rb:84:in `deliver!'
我在puts
方法中添加了一个简单的deliver!
来查看存储值是否存在差异,而且似乎Travis CI忽略了生成的YAML中的换行符,然后导致了解析错误:
特拉维斯:
"--- smtp_settings: :address: localhost :port: 25 :domain: localhost.localdomain :user_name: some.user :password: some.password :authentication: :plain :enable_starttls_auto: true "
本地:
"---\nsmtp_settings:\n :address: localhost\n :port: 25\n :domain: localhost.localdomain\n :user_name: some.user\n :password: some.password\n :authentication: :plain\n :enable_starttls_auto: true\n"
有趣的是,在特拉维斯CI失败之前,我没有改变任何关于这些方法的东西,所以我不确定我是否只是忽略了这里的某些东西,或者它是否是某种东西不相容问题。
我可以做些什么来保留换行符吗?
修改:其他信息
deliver!
- 实际创建新电子邮件记录的方法,我会通过YAML序列化这些设置,暂时将它们保存在电子邮件标题中,稍后将其还原,请参阅{{ 1}}和ar_mailer_setting
here 引发错误的源代码:here
完整的Travis CI输出:here
如果需要更多信息,请告知我们,我会将其添加到问题中。 提前谢谢!