创建Rails模型时出现语法错误

时间:2011-10-13 10:53:57

标签: ruby-on-rails ruby-on-rails-3

我使用命令

在Rails 3中创建Car模型
rails generate model Car name:string id_str:string

但我得到了错误:

/home/XX/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.1/lib/active_support/dependencies.rb:234:in `load': /home/XX/myapp/config/initializers/session_store.rb:3: syntax error, unexpected ':', expecting $end (SyntaxError)
...sion_store :cookie_store, key: '_myapp_session'

为什么?

我的session_store.rb

Myapp::Application.config.session_store :cookie_store, key: '_myapp_session'

我的session_store.rb出了什么问题?

6 个答案:

答案 0 :(得分:7)

当您尝试在Ruby<中使用Ruby 1.9.2 Hash语法时,通常会发生此错误。 1.9。

在Ruby 1.9.2中,以下代码完美地运行

Myapp::Application.config.session_store :cookie_store, key: '_myapp_session'

在Ruby< 1.9你必须使用

Myapp::Application.config.session_store :cookie_store, :key => '_myapp_session'

这很奇怪,因为您的堆栈跟踪引用了Ruby 1.9.2。你确定你使用Ruby 1.9.2运行生成器吗?

在任何情况下,您都可以将session_store.rb文件转换为哈希火箭语法。如果它有效,则表示您没有使用Ruby 1.9.2并且粘贴了无效的错误消息。

答案 1 :(得分:3)

通过一些调试和游戏,这就是我最终做的事情:

for x in `gem list --no-versions`; do sudo gem uninstall $x; done

这会强制删除所有“旧”宝石。然后我继续验证gem环境以确认gem正在使用正确的ruby版本:

sudo gem env

遇到错误的原因是rails仍在尝试使用ruby 1.8,这会导致各种问题。

完成上述所有检查后:

sudo gem update --system
sudo gem install rubygems-update
sudo update_rubygems

这将确保您使用最新的宝石版本。然后:

sudo gem install rails

这将安装您需要的一切。我将所有gem命令作为sudo运行,以确保我的root安装已正确配置/设置。

你的最终宝石环境看起来应该是这样的:

RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.13
  - RUBY VERSION: 1.9.3 (2011-10-30 patchlevel 0) [x86_64-darwin10.8.0]
  - INSTALLATION DIRECTORY: /usr/local/Cellar/ruby/1.9.3-p0/lib/ruby/gems/1.9.1
  - RUBY EXECUTABLE: /usr/local/Cellar/ruby/1.9.3-p0/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/Cellar/ruby/1.9.3-p0/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-10
  - GEM PATHS:
     - /usr/local/Cellar/ruby/1.9.3-p0/lib/ruby/gems/1.9.1

答案 2 :(得分:1)

TL; DR :卸载然后重新安装railties gem

答案很长

在您的项目目录中,如果您输入which rails,您会看到什么?我的,我看到/usr/bin/rails。这给了我一个线索,它使用了错误的rails可执行文件。如果我查看我的$PATH,我可以看到RVM的bin路径(/Users/ramon/.rvm/gems/ruby-1.9.3-p194/bin)不包含rails文件(关于如何删除它 - 我没有线索)。这一定是我的系统取代/usr/bin/rails的原因。

查看Rails源代码,我看到railties gem有rails bin文件。我卸载了铁路(gem uninstall railties),然后重新安装了它。 Voila - which rails显示/Users/ramon/.rvm/gems/ruby-1.9.3-p194/bin/rails

答案 3 :(得分:0)

我能够通过将.rvmrc文件添加到我的应用程序来解决此问题。

echo "rvm ruby-2.0.0@rails32 --create" > .rvmrc

答案 4 :(得分:-1)

我通过删除〜/ .rvm目录并重新安装RVM解决了这个问题。

答案 5 :(得分:-2)

非常奇怪的问题,因为错误是自我描述

你在这个文件中有一些混乱,并且缺少结束语句

`load': /home/XX/myapp/config/initializers/session_store.rb:3