Ruby 帕德里诺教程:Can';t修改冻结字符串(运行时错误)

Ruby 帕德里诺教程:Can';t修改冻结字符串(运行时错误),ruby,padrino,Ruby,Padrino,我将从这里开始学习Padrino教程: 我正在复制和粘贴命令,但很快就遇到了一个我不理解的错误: $ 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/pad

我将从这里开始学习Padrino教程:

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

$ 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'

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

如果指定了测试组件,则生成控制器时似乎存在问题。在本例中,您使用的是shoulda,但在使用rspec和其他软件时也会发生同样的情况。据报道,这是一个bug:已经修复,但还不是稳定版本的一部分

解决这个问题的一个方法是将您的Gemfile更改为使用他们的github repo中的最新版本。要执行此操作,请删除GemFile.lock文件,并注释掉GemFile中“Padrino Stable Gem”下的行:

gem 'padrino', '0.12.4'
然后取消对“或Padrino Edge”下的行的注释:

gem 'padrino', :github => 'padrino/padrino-framework'
然后重新运行bundle安装

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

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

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


在Post控制器中,因为自编写指南以来,活动记录界面已发生更改。

我只需转到padrinogem路径即可解决此问题

对我来说是:

/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
path = @controller.dup