Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 创建Rails模型时出现语法错误_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

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

Ruby on rails 创建Rails模型时出现语法错误,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在Rails 3中使用以下命令创建汽车模型: 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:

我正在Rails 3中使用以下命令创建汽车模型:

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\u store.rb

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

我的
session\u store.rb有什么问题?

真是个奇怪的问题,因为错误是自减的

您的文件有些混乱,并且缺少结束语句

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

当您试图使用Ruby<1.9的Ruby 1.9.2哈希语法时,通常会发生此错误

在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\u store.rb
文件转换为哈希语法。如果成功,则表示您没有使用Ruby 1.9.2,粘贴了一条无效的错误消息。

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

经过一点调试和尝试,我最终做到了:

for x in `gem list --no-versions`; do sudo gem uninstall $x; done
这将强制移除所有“旧”宝石。然后,我继续验证gem环境,以确认gem使用的是正确的ruby版本:

sudo gem env
所经历的错误是由于rails仍在尝试使用Ruby1.8,这会导致各种问题

上述所有检查均正确后,请执行以下操作:

sudo gem update --system
sudo gem install rubygems-update
sudo update_rubygems
这将确保您是最新的gem版本。然后:

sudo gem install rails
这将安装您所需的一切。我以sudo的身份运行了所有gem命令,以确保我的root安装已正确配置/设置

您的最终gem env应该如下所示:

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文件。我卸载了railties(
gem uninstall railties
),然后再次重新安装。瞧——
哪个rails
显示了
/Users/ramon/.rvm/gems/ruby-1.9.3-p194/bin/rails
我通过向我的应用程序添加一个.rvmrc文件来解决这个问题

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

是的,我明白了,但是我的session\u store.rb(查看我更新的帖子)中哪里出错了?你的
session\u store.rb
包含
键:“\u myapp\u session”
,但错误显示为
键:“\u deptracker\u session”
。你确定粘贴了正确的文件吗?是的,这是我的打字错误,我现在更正了它。在整个文件中,正如所列的示例不包含错误,上面有一些非关闭语句。我刚刚创建了一个新的Rails项目,并且出现了相同的错误。文件session\u store.rb包含一行
Demo::Application.config.session\u store:cookie\u store,key:“\u Demo\u session”
only.my“ruby-v”显示我正在使用ruby 1.9.2p290,很奇怪,我遇到了这个问题是的,在我更改语法后它可以工作,但我使用的是1.9.2…奇怪的是,我很想知道这是如何解决的-我在雪豹上遇到了同样的问题,添加=>仅解决了该文件的问题,但仍会在其他文件中导致错误。@TeckniX这表示您没有使用Ruby 1.9。2@SimoneCarletti——正如你在下面看到的,我必须经历很多才能加载正确版本的ruby。该问题与原始海报相同,其中安装了两个版本的ruby,你也可以将/usr/bin/ruby重命名为类似于/usr/bin/ruby-1.8的名称,并通过sudo-ln-s/usr/local/bin/ruby/usr/bin/rubyLast更新创建一个指向新ruby的符号链接,这使得一切都能完美地工作-通过sudo vi/usr/bin/rails编辑你的rails文件(其他编辑器也可以在这里工作)并替换第一行#/系统/。。。。由#/usr/bin/ruby-这将迫使rails使用我们在上面创建的符号链接,而不是使用默认的Snow Leopard ruby 1.8框架