Ruby - 语法错误,意外的 tIDENTIFIER,期待结束
Ruby - syntax error, unexpected tIDENTIFIER, expecting end
请帮帮我,我做错了什么?我在我的 Fastfile 中通过 ruby 做电报通知程序并遇到了这个问题:
[!] Syntax error in your Fastfile on line 175: Fastfile:175: syntax error, unexpected tIDENTIFIER, expecting end
210...ication/json' --data '{"chat_id": "123456789", "media": [{"t...
211... ^~~~~~~
212Fastfile:175: syntax error, unexpected tINTEGER, expecting end
213... --data '{"chat_id": "123456789", "media": [{"type": "photo"...
214... ^~~~~~~~~
我的代码:
lane :detox do
images = Dir.glob("folder/*.png")
images.each do |image|
puts image
sh "curl --request POST --header 'Content-Type: application/json' --data '{"chat_id": "123456789", "media": [{"type": "photo", "media": "attach://image"}]' https://api.telegram.org/botToken/sendMediaGroup"
end
我发现这里有些地方不对。首先,您应该转义 sh
之后字符串中的所有引号。否则,字符串会提前终止,您将遇到错误。
其次,您打开了 2 个 do
块:lane :detox do
和 images.each do |image|
,但您只有一个 end
.
这应该是
lane :detox do
images = Dir.glob("folder/*.png")
images.each do |image|
puts image
sh "curl --request POST --header 'Content-Type: application/json' --data '{\"chat_id\": \"123456789\", \"media\": [{\"type\": \"photo\", \"media\": \"attach://image\"}]}' https://api.telegram.org/botToken/sendMediaGroup"
end
end
语法错误是由于在双引号字符串中使用未转义的双引号引起的:
str = "foo "bar" baz"
# ^^^^^ won't work
您可以将 "
转义为 \"
,但使用 heredoc 通常更容易,因为它不需要转义:
sh <<-CMD
curl https://api.telegram.org/botToken/sendMediaGroup \
--request POST \
--header 'Content-Type: application/json' \
--data '{"chat_id": "123456789", "media": [{"type": "photo", "media": "attach://image"}]}'
CMD
但是,您也可以将命令选项作为单独的参数传递给 sh
:
,而不是自己构建命令
sh(
'curl', 'https://api.telegram.org/botToken/sendMediaGroup',
'--request', 'POST',
'--header', 'Content-Type: application/json',
'--data', '{"chat_id": "123456789", "media": [{"type": "photo", "media": "attach://image"}]}'
)
这还允许您从 Ruby 散列动态创建 JSON:
require 'json'
data = {
chat_id: "123456789",
media: [{ type: "photo", media: "attach://image" }]
}
sh(
'curl', 'https://api.telegram.org/botToken/sendMediaGroup',
'--request', 'POST',
'--header', 'Content-Type: application/json',
'--data', data.to_json
)
这样做可以确保您的 JSON 始终有效。 (语法上)
请帮帮我,我做错了什么?我在我的 Fastfile 中通过 ruby 做电报通知程序并遇到了这个问题:
[!] Syntax error in your Fastfile on line 175: Fastfile:175: syntax error, unexpected tIDENTIFIER, expecting end
210...ication/json' --data '{"chat_id": "123456789", "media": [{"t...
211... ^~~~~~~
212Fastfile:175: syntax error, unexpected tINTEGER, expecting end
213... --data '{"chat_id": "123456789", "media": [{"type": "photo"...
214... ^~~~~~~~~
我的代码:
lane :detox do
images = Dir.glob("folder/*.png")
images.each do |image|
puts image
sh "curl --request POST --header 'Content-Type: application/json' --data '{"chat_id": "123456789", "media": [{"type": "photo", "media": "attach://image"}]' https://api.telegram.org/botToken/sendMediaGroup"
end
我发现这里有些地方不对。首先,您应该转义 sh
之后字符串中的所有引号。否则,字符串会提前终止,您将遇到错误。
其次,您打开了 2 个 do
块:lane :detox do
和 images.each do |image|
,但您只有一个 end
.
这应该是
lane :detox do
images = Dir.glob("folder/*.png")
images.each do |image|
puts image
sh "curl --request POST --header 'Content-Type: application/json' --data '{\"chat_id\": \"123456789\", \"media\": [{\"type\": \"photo\", \"media\": \"attach://image\"}]}' https://api.telegram.org/botToken/sendMediaGroup"
end
end
语法错误是由于在双引号字符串中使用未转义的双引号引起的:
str = "foo "bar" baz"
# ^^^^^ won't work
您可以将 "
转义为 \"
,但使用 heredoc 通常更容易,因为它不需要转义:
sh <<-CMD
curl https://api.telegram.org/botToken/sendMediaGroup \
--request POST \
--header 'Content-Type: application/json' \
--data '{"chat_id": "123456789", "media": [{"type": "photo", "media": "attach://image"}]}'
CMD
但是,您也可以将命令选项作为单独的参数传递给 sh
:
sh(
'curl', 'https://api.telegram.org/botToken/sendMediaGroup',
'--request', 'POST',
'--header', 'Content-Type: application/json',
'--data', '{"chat_id": "123456789", "media": [{"type": "photo", "media": "attach://image"}]}'
)
这还允许您从 Ruby 散列动态创建 JSON:
require 'json'
data = {
chat_id: "123456789",
media: [{ type: "photo", media: "attach://image" }]
}
sh(
'curl', 'https://api.telegram.org/botToken/sendMediaGroup',
'--request', 'POST',
'--header', 'Content-Type: application/json',
'--data', data.to_json
)
这样做可以确保您的 JSON 始终有效。 (语法上)