Padrino教程:无法修改冻结字符串(运行时错误)

时间:2014-12-26 15:17:59

标签: ruby padrino

我从这里开始关注Padrino教程:

https://www.padrinorb.com/guides/blog-tutorial

我正在复制并粘贴命令,但我很快就遇到了一个我不明白的错误:

$ padrino g controller posts get:index get:show
  create  app/controllers/posts.rb
  create  app/views/posts
   apply  tests/shoulda
 /Users/waprin/.rvm/gems/ruby-2.1.0/gems/padrino-gen-0.12.4/lib/padrino-gen/generators/controller.rb:66:in `prepend': can't modify frozen String (RuntimeError)
from /Users/waprin/.rvm/gems/ruby-2.1.0/gems/padrino-gen-0.12.4/lib/padrino-gen/generators/controller.rb:66:in `create_controller'

2 个答案:

答案 0 :(得分:3)

这可能有点晚了,但是如果有其他人遇到这个错误(因为我刚刚完成了相同的教程),我还是会发帖...

如果指定了测试组件,则生成控制器时似乎存在问题。在这种情况下,您使用的是shoulda,但在使用rspec和其他人时也是如此。它被报告为一个错误:https://github.com/padrino/padrino-framework/issues/1850并已修复,但尚未成为稳定版本的一部分。

解决此问题的一个选择是更改Gemfile以使用其github存储库中的最新版本。为此,请删除您的GemFile.lock文件,并注释掉GemFile中“Padrino Stable Gem”下的行:

gem 'padrino', '0.12.4'

然后取消注释'或Padrino Edge'下的行:

gem 'padrino', :github => 'padrino/padrino-framework'

然后重新运行bundle install。

当然,您将不再运行稳定版本,这可能会带来其他权衡。

作为旁注,我认为该页面上的指南已经过时了。我还需要替换:

  get :index do
    @posts = Post.all(:order => 'created_at desc')
    render 'posts/index'
  end

使用:

  get :index, :provides => [:html, :rss, :atom] do
    @posts = Post.order('created_at desc')
    render 'posts/index'
  end
在Post控制器中

,因为活动记录界面自编写指南以来已发生变化。

答案 1 :(得分:0)

我只需转到 padrino gem路径即可解决此问题。

对我而言:

/Users/ahmadhassan/.rvm/gems/ruby-2.2.0/gems/padrino-gen-0.12.4/lib/padrino-gen/generators

打开controller.rb并更改第61行:

path = @controller

path = @controller.dup