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

我使用命令在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出了什么问题?

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

在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文件转换为hash-rocket语法。 如果它有效,则表示您没有使用Ruby 1.9.2并且粘贴了无效的错误消息。

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

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

这迫使所有’旧’gem被移除。 然后我继续validationgem环境以确认gem使用了正确的ruby版本:

 sudo gem env 

经历的错误是由于rails仍在尝试使用ruby 1.8,这会导致各种问题。

完成以上所有检查后,请执行以下操作:

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

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

 sudo gem install rails 

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

你的最终gem环境应该是这样的:

 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 

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

我能够通过向我的应用程序添加.rvmrc文件来解决这个问题。

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

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

真正奇怪的问题,因为错误是自我描述

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

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