我正在使用Ruby on Rails。我正在尝试实施https://www.kraken.com/help/api
虽然它并不明显,但我对API和宝石的实施知识非常基础。
我转到"示例-api-code"段落,我到https://github.com/leishman/kraken_ruby
我包含了gem并做了捆绑。
现在我们进入"用法" "创建客户"
我假设我在config/kraken.rb
API_KEY = '3bH+M/nLp......'
API_SECRET = 'wQG+7Lr9b.....'
kraken = Kraken::Client.new(API_KEY, API_SECRET)
time = kraken.server_time
time.unixtime #=> 1393056191
我想测试一些简单的东西,例如显示时间。
我将以下代码放在views / welcome / index.html.erb文件中,但后来出现错误。
<p><%= kraken.server_time %></p>
-> ActionView::Template::Error (undefined local variable or method `kraken' for #<#<Class:0x007f95c6246ba8>:0x007f95c6245eb0>):
在我的html.erb文件中尝试此代码,它给了我另一个错误
<p><%= @kraken.server_time %></p>
-> ActionView::Template::Error (undefined method `server_time' for nil:NilClass):
编辑:解决方案尝试,TLDR NameError (uninitialized constant...
@ Gladis
使用您的解决方案我收到此错误
->! Unable to load application: SyntaxError: /app/app/controllers/welcome_controller.rb:5: dynamic constant assignment
-> API_KEY = '...'
所以我试过
def index
@kraken = Kraken::Client.new('3bH+M/nLp...', 'wQG+7Lr9b...')
time = @kraken.server_time
time.unixtime #=> 1393056191
end
并得到了这个新错误
NameError (uninitialized constant WelcomeController::Kraken):
app/controllers/welcome_controller.rb:5:in `index'
@ Pavel Tkackenko
你的第一个解决方案(包装在类似单身的课程中)给了我这个错误。
ActionView::Template::Error (uninitialized constant ActionView::CompiledTemplates::KrakenClient):
app/views/welcome/index.html.erb:1:in `_app_views_welcome_index_html_erb__3584347874708863751_70226442404480'
1: <p><%= KrakenClient.get.server_time %></p>
你的第二个解决方案(猴子补丁)给了我这个错误。
ActionView::Template::Error (uninitialized constant ActionView::CompiledTemplates::Kraken):
1: <p><%= Kraken.client.server_time %></p>
app/views/welcome/index.html.erb:1:in `_app_views_welcome_index_html_erb___3719740865851336982_69820265644620'
使用Pavel方法将/config/kraken.rb
移至/config/initializers/kraken.rb
将它包装在类似单身的类中会给我这个错误(事实上,它甚至不让我托管服务器)
->When I host it on my local computer with bin/rails server
/config/initializers/kraken.rb:6:in `<class:KrakenClient>': uninitialized constant KrakenClient::Kraken (NameError)
/config/initializers/kraken.rb:1:in `<top (required)>'
->When I host it on heroku
Running: rake assets:precompile
rake aborted!
NameError: uninitialized constant KrakenClient::Kraken
/config/initializers/kraken.rb:5:in `<class:KrakenClient>'
/config/initializers/kraken.rb:1:in `<top (required)>'
...
/config/environment.rb:5:in `<top (required)>'
使用monkey-patch我收到此错误
ActionView::Template::Error (uninitialized constant Kraken::Client):
1: <p><%= Kraken.client.server_time %></p>
config/initializers/kraken.rb:8:in `client'
app/views/welcome/index.html.erb:1:in `_app_views_welcome_index_html_erb___577296263292451462_70097201303100'
如果你让它在你的计算机上工作,我会很乐意使用你的代码作为一个骨架(我假设这比找出我身边的错误更容易)。
答案 0 :(得分:1)
将此代码放在WelcomeController.rb
中 def index
API_KEY = '3bH+M/nLp......'
API_SECRET = 'wQG+7Lr9b.....'
@kraken = Kraken::Client.new(API_KEY, API_SECRET)
time = @kraken.server_time
time.unixtime #=> 1393056191
end
在此控制器下查看:
<p><%= @kraken.server_time %></p>
答案 1 :(得分:0)
kraken = Kraken::Client.new(API_KEY, API_SECRET)
kraken
这里是局部变量。如果你把它放到config / kraken.rb中,它将无法在外面访问。
有不同的解决方案。一种是将它包装成类似单身的类:
# config/initializers/kraken.rb
class KrakenClient
API_KEY = '3bH+M/nLp......'
API_SECRET = 'wQG+7Lr9b.....'
@@config = Kraken::Client.new(API_KEY, API_SECRET)
def self.get
@@config
end
end
# index.html.erb
<p><%= KrakenClient.get.server_time %></p>
另一种方法是猴子补丁Kraken
本身:
# config/initializers/kraken.rb
class Kraken
API_KEY = '3bH+M/nLp......'
API_SECRET = 'wQG+7Lr9b.....'
class << self
def client
@client ||= Kraken::Client.new(API_KEY, API_SECRET)
end
end
end
# index.html.erb
<p><%= Kraken.client.server_time %></p>