我从这里开始学习帕德里诺教程:
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'

最佳答案

这可能有点晚了,但如果其他人遇到这个错误(因为我刚刚完成了相同的教程),我还是会发布。。。
如果指定了测试组件,则生成控制器时可能会出现问题在本例中,您使用的是shoulda,但在使用rspec或其他方法时也会发生同样的情况据报道它是一个bug:https://github.com/padrino/padrino-framework/issues/1850并且已经被修复,但是还不是稳定版本的一部分。
解决这个问题的一个方法是将Gemfile更改为使用github repo中的最新版本要执行此操作,请删除Gem file.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

使用:
  get :index, :provides => [:html, :rss, :atom] do
    @posts = Post.order('created_at desc')
    render 'posts/index'
  end

在post控制器中,作为活动记录的接口在编写指南后发生了更改。

08-27 04:23