创建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